diff --git a/README.md b/README.md index 5f74e547c..79ff39e14 100644 --- a/README.md +++ b/README.md @@ -4,18 +4,18 @@ pgBackRest is a reliable backup and restore solution for PostgreSQL that seamlessly scales up to the largest databases and workloads. -pgBackRest [v2.59.2](https://github.com/pgbackrest/pgbackrest/releases/tag/release/2.59.2) is the current stable release. Release notes are on the [Releases](https://pgbackrest.org/release.html) page. +pgBackRest [v2.59.3](https://github.com/pgbackrest/pgbackrest/releases/tag/release/2.59.3) is the current stable release. Release notes are on the [Releases](https://pgbackrest.org/release.html) page. Please give us a star on [GitHub](https://github.com/pgbackrest/pgbackrest) if you like pgBackRest! ## News +**October 4, 2026** - [Weak Encryption Subkeys and Salts](https://pgbackrest.org/news.html#weak-encryption) + +**October 4, 2026** - [pgBackRest 2.59.3 Released](https://pgbackrest.org/news.html#release-2-59-3) + **September 27, 2026** - [pgBackRest 2.59.2 Released](https://pgbackrest.org/news.html#release-2-59-2) -**August 17, 2026** - [pgBackRest 2.59.1 Released](https://pgbackrest.org/news.html#release-2-59-1) - -**July 20, 2026** - [New Distribution Tarball](https://pgbackrest.org/news.html#distribution-tarball) - ## Features ### Parallel Backup & Restore diff --git a/doc/RELEASE.md b/doc/RELEASE.md index ac4f9c8b3..1edb0e5da 100644 --- a/doc/RELEASE.md +++ b/doc/RELEASE.md @@ -146,9 +146,9 @@ Wait for CI testing to complete before proceeding to the next step. Set the release variables. `GITHUB_TOKEN` needs the `contents: write` permission to create the release and `actions: read` to download the tarball artifact (a classic token with the `repo` scope covers both): ``` -export GITHUB_TOKEN=? export GITHUB_REPO=pgbackrest/pgbackrest export GIT_BRANCH=integration +export GITHUB_TOKEN=? ``` Release the distribution tarball that CI built and tested for the release commit rather than building one locally. Every push to the release branch builds the tarball, checks it for missing files, and smoke tests it on a range of distributions, so the most recent run's artifact is the exact tested bytes to release. Run the commands below from an empty directory. diff --git a/doc/xml/auto/metric-coverage-report.auto.xml b/doc/xml/auto/metric-coverage-report.auto.xml index 0e5c34e9d..069087aa1 100644 --- a/doc/xml/auto/metric-coverage-report.auto.xml +++ b/doc/xml/auto/metric-coverage-report.auto.xml @@ -9,7 +9,7 @@ build/config 39/39 (100.00%) 564/564 (100.00%) - 1143/1143 (100.00%) + 1142/1142 (100.00%) @@ -72,7 +72,7 @@ command/backup 50/50 (100.00%) 790/790 (100.00%) - 1645/1645 (100.00%) + 1641/1641 (100.00%) @@ -261,7 +261,7 @@ config 93/93 (100.00%) 1025/1026 (99.90%) - 1652/1652 (100.00%) + 1649/1649 (100.00%) @@ -310,14 +310,14 @@ storage 68/68 (100.00%) 304/304 (100.00%) - 762/762 (100.00%) + 759/759 (100.00%) storage/azure 26/26 (100.00%) 162/162 (100.00%) - 488/488 (100.00%) + 487/487 (100.00%) @@ -331,7 +331,7 @@ storage/gcs 34/34 (100.00%) 176/176 (100.00%) - 575/575 (100.00%) + 574/574 (100.00%) @@ -352,7 +352,7 @@ storage/s3 31/31 (100.00%) 200/200 (100.00%) - 663/663 (100.00%) + 661/661 (100.00%) @@ -366,5 +366,5 @@ TOTAL 1705/1705 (100.00%) 10616/10618 (99.98%) - 25163/25163 (100.00%) + 25148/25148 (100.00%) diff --git a/doc/xml/news.xml b/doc/xml/news.xml index 4144abaf4..8200f5c17 100644 --- a/doc/xml/news.xml +++ b/doc/xml/news.xml @@ -2,6 +2,108 @@ News + +
+ Weak Encryption Subkeys and Salts + +

Versions of prior to 2.59.3 did not check for an error when generating random data for encryption. If OpenSSL was unable to get random data from the operating system, then encryption subkeys and salts were generated from data already in memory and no error was reported. Repositories without encryption are not affected.

+ +

This error should be rare. Possible causes include a sandbox or seccomp policy that blocks the getrandom() system call and an invalid OpenSSL configuration.

+ +

The subkeys in archive.info and backup.info are the main concern. They are generated once by stanza-create and used for the life of the stanza, so upgrading does not replace a weak subkey. Weak backup subkeys and salts are removed as backups and WAL expire.

+ +
+ Impact + +

The WAL subkey is stored in archive.info and the manifest subkey is stored in backup.info. A weak subkey is easier to guess than a random subkey, and a guessed subkey decrypts the files encrypted with it without repo-cipher-pass. How much easier depends on what was in memory, which varies by platform and build. A weak subkey in archive.info exposes all WAL in the repository. A weak subkey in backup.info exposes every backup, since the manifests are encrypted with it and each manifest stores the subkey for the files in its backup. This includes WAL and backups added after upgrading.

+ +

The subkey for the files in a backup is generated for each full backup and also used by the differential and incremental backups based on it. A weak backup subkey exposes the files in those backups.

+ +

A weak salt does not expose a subkey. Files encrypted with the same subkey and salt use the same key and IV, so identical data in those files produces identical encrypted data. The salt is stored unencrypted at the start of each file, and a weak salt may contain up to eight bytes of data that was previously in memory.

+
+ +
+ Check Subkeys + +

Run the following on a host that has access to the repository, with STANZA set to the stanza name. Add --repo to the pgbackrest commands to check a repository other than the first one.

+ + +STANZA=demo + +for file in archive/$STANZA/archive.info backup/$STANZA/backup.info; do + for key in $(pgbackrest --stanza=$STANZA repo-get $file | grep '^cipher-pass=' | grep -oE '[A-Za-z0-9+/]{64}'); do + echo "$(printf '%s' $key | base64 -d | od -An -v -tx1 | tr -s ' ' '\n' | grep -c '^00$') $file" + done +done + + +

The first column is the number of zero bytes in the subkey. A random subkey has six or more zero bytes less than once in 25 million, while the weak subkeys found in testing had 13 or more. A subkey with six or more zero bytes should be considered weak.

+
+ +
+ OpenSSL 1.0 + +

Versions of prior to 2.53 could be built with OpenSSL 1.0, which generates random data from a state that was not seeded with random data when it is unable to get random data from the operating system. Weak subkeys generated this way cannot be detected with the check above.

+
+ +
+ Remediation + + + Upgrade to 2.59.3 or later, which reports an error when random data cannot be generated. + If the subkey in archive.info or backup.info is weak, create the stanza in a new repository and keep the old repository only as long as its backups are needed. + Consider making a new full backup after upgrading, since differential and incremental backups use the subkey of their full backup. + Weak backup subkeys and salts are removed as backups and WAL from before the upgrade expire. Backups with a long retention period keep them until they expire. + +
+
+ + +
+ <backrest/> 2.59.3 Released + +

The community is pleased to announce the release of {[project]} 2.59.3, the latest version of the reliable, easy-to-use backup and restore solution that can seamlessly scale up to the largest databases and workloads.

+ +

supports a robust set of features for managing your backup and recovery infrastructure, including: parallel backup/restore, full/differential/incremental backups, block incremental backup, multiple repositories, delta restore, parallel asynchronous archiving, malware/ransomware protection, per-file checksums, page checksums (when enabled) validated during backup, multiple compression types, encryption, partial/failed backup resume, backup from standby, tablespace and link support, S3/Azure/GCS/SFTP support, backup expiration, local/remote operation via SSH or TLS, flexible configuration, and more.

+ +

can be installed from the {[postgres]} Yum Repository or the {[postgres]} APT Repository and packages are also available for many other distributions. Source code can be downloaded from releases.

+ +
+ Bug Fixes + + + Fix possible weak encryption subkeys/salts (j0uinim) + Fix possible checksum error loading encrypted info and manifest files (j0uinim) + + +

See the 2.59.3 Release Notes for additional fixes and improvements.

+
+ +
+ Important Notes + + + In prior versions it was possible for weak encryption subkeys and salts to be generated if there was an error accessing system random data. See Weak Encryption Subkeys and Salts for more information. + +
+ + + +
+ Sponsorship + +

This release was made possible by the generous sponsorship of AWS, Supabase, pgEdge, Tiger Data, Percona, Eon, Xata, Dalibo, and Data Egret.

+
+
+
<backrest/> 2.59.2 Released diff --git a/doc/xml/release.xml b/doc/xml/release.xml index 373a3859b..3af322a19 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -1,6 +1,7 @@ + @@ -139,6 +140,7 @@ &v2.60.0; + &v2.59.3; &v2.59.2; &v2.59.1; &v2.59.0; diff --git a/doc/xml/release/2020s/2026/2.59.3.xml b/doc/xml/release/2020s/2026/2.59.3.xml new file mode 100644 index 000000000..0b51ebb53 --- /dev/null +++ b/doc/xml/release/2020s/2026/2.59.3.xml @@ -0,0 +1,35 @@ + + + +

IMPORTANT NOTE: In prior versions it was possible for weak encryption subkeys and salts to be generated if there was an error accessing system random data. See Weak Encryption Subkeys and Salts for more information.

+
+ + + + + + + + + + + +

Fix possible checksum error loading encrypted info and manifest files.

+
+ + + + + + + + + + + + +

Fix possible weak encryption subkeys/salts.

+
+
+
+
diff --git a/doc/xml/release/2020s/2026/2.60.0.xml b/doc/xml/release/2020s/2026/2.60.0.xml index 493d89400..01ec81012 100644 --- a/doc/xml/release/2020s/2026/2.60.0.xml +++ b/doc/xml/release/2020s/2026/2.60.0.xml @@ -2,38 +2,8 @@

IMPORTANT NOTE: The restore command will now error and stop if any restored file contains an invalid page checksum, which leaves the cluster incomplete and unable to start, so the restore must be rerun. The expire command will now refuse to expire if the oldest retained backup would contain checksum errors, which also prevents archive from being expired in that repository. Set checksum-page-error=n to warn instead of erroring.

- -

IMPORTANT NOTE: In prior versions it was possible for weak encryption subkeys and salts to be generated if there was an error accessing system random data.

- - - - - - - - - - -

Fix possible checksum error loading encrypted info and manifest files.

-
- - - - - - - - - - - - -

Fix possible weak encryption subkeys/salts.

-
-
-