You've already forked pgbackrest
mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2026-10-23 21:28:56 +03:00
Merge v2.59.3 release.
This commit is contained in:
10
README.md
10
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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<table-cell>build/config</table-cell>
|
||||
<table-cell>39/39 (100.00%)</table-cell>
|
||||
<table-cell>564/564 (100.00%)</table-cell>
|
||||
<table-cell>1143/1143 (100.00%)</table-cell>
|
||||
<table-cell>1142/1142 (100.00%)</table-cell>
|
||||
</table-row>
|
||||
|
||||
<table-row>
|
||||
@@ -72,7 +72,7 @@
|
||||
<table-cell>command/backup</table-cell>
|
||||
<table-cell>50/50 (100.00%)</table-cell>
|
||||
<table-cell>790/790 (100.00%)</table-cell>
|
||||
<table-cell>1645/1645 (100.00%)</table-cell>
|
||||
<table-cell>1641/1641 (100.00%)</table-cell>
|
||||
</table-row>
|
||||
|
||||
<table-row>
|
||||
@@ -261,7 +261,7 @@
|
||||
<table-cell>config</table-cell>
|
||||
<table-cell>93/93 (100.00%)</table-cell>
|
||||
<table-cell>1025/1026 (99.90%)</table-cell>
|
||||
<table-cell>1652/1652 (100.00%)</table-cell>
|
||||
<table-cell>1649/1649 (100.00%)</table-cell>
|
||||
</table-row>
|
||||
|
||||
<table-row>
|
||||
@@ -310,14 +310,14 @@
|
||||
<table-cell>storage</table-cell>
|
||||
<table-cell>68/68 (100.00%)</table-cell>
|
||||
<table-cell>304/304 (100.00%)</table-cell>
|
||||
<table-cell>762/762 (100.00%)</table-cell>
|
||||
<table-cell>759/759 (100.00%)</table-cell>
|
||||
</table-row>
|
||||
|
||||
<table-row>
|
||||
<table-cell>storage/azure</table-cell>
|
||||
<table-cell>26/26 (100.00%)</table-cell>
|
||||
<table-cell>162/162 (100.00%)</table-cell>
|
||||
<table-cell>488/488 (100.00%)</table-cell>
|
||||
<table-cell>487/487 (100.00%)</table-cell>
|
||||
</table-row>
|
||||
|
||||
<table-row>
|
||||
@@ -331,7 +331,7 @@
|
||||
<table-cell>storage/gcs</table-cell>
|
||||
<table-cell>34/34 (100.00%)</table-cell>
|
||||
<table-cell>176/176 (100.00%)</table-cell>
|
||||
<table-cell>575/575 (100.00%)</table-cell>
|
||||
<table-cell>574/574 (100.00%)</table-cell>
|
||||
</table-row>
|
||||
|
||||
<table-row>
|
||||
@@ -352,7 +352,7 @@
|
||||
<table-cell>storage/s3</table-cell>
|
||||
<table-cell>31/31 (100.00%)</table-cell>
|
||||
<table-cell>200/200 (100.00%)</table-cell>
|
||||
<table-cell>663/663 (100.00%)</table-cell>
|
||||
<table-cell>661/661 (100.00%)</table-cell>
|
||||
</table-row>
|
||||
|
||||
<table-row>
|
||||
@@ -366,5 +366,5 @@
|
||||
<table-cell>TOTAL</table-cell>
|
||||
<table-cell>1705/1705 (100.00%)</table-cell>
|
||||
<table-cell>10616/10618 (99.98%)</table-cell>
|
||||
<table-cell>25163/25163 (100.00%)</table-cell>
|
||||
<table-cell>25148/25148 (100.00%)</table-cell>
|
||||
</table-row>
|
||||
|
||||
102
doc/xml/news.xml
102
doc/xml/news.xml
@@ -2,6 +2,108 @@
|
||||
<doc title="{[project]}" subtitle="News" toc="n">
|
||||
<description>News</description>
|
||||
|
||||
<!-- ======================================================================================================================= -->
|
||||
<section id="weak-encryption" date="2026-10-04">
|
||||
<title>Weak Encryption Subkeys and Salts</title>
|
||||
|
||||
<p>Versions of <backrest/> 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.</p>
|
||||
|
||||
<p>This error should be rare. Possible causes include a sandbox or seccomp policy that blocks the <code>getrandom()</code> system call and an invalid OpenSSL configuration.</p>
|
||||
|
||||
<p>The subkeys in <file>archive.info</file> and <file>backup.info</file> are the main concern. They are generated once by <cmd>stanza-create</cmd> 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.</p>
|
||||
|
||||
<section id="impact">
|
||||
<title>Impact</title>
|
||||
|
||||
<p>The WAL subkey is stored in <file>archive.info</file> and the manifest subkey is stored in <file>backup.info</file>. A weak subkey is easier to guess than a random subkey, and a guessed subkey decrypts the files encrypted with it without <setting>repo-cipher-pass</setting>. How much easier depends on what was in memory, which varies by platform and build. A weak subkey in <file>archive.info</file> exposes all WAL in the repository. A weak subkey in <file>backup.info</file> 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.</p>
|
||||
|
||||
<p>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.</p>
|
||||
|
||||
<p>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.</p>
|
||||
</section>
|
||||
|
||||
<section id="check-subkey">
|
||||
<title>Check Subkeys</title>
|
||||
|
||||
<p>Run the following on a host that has access to the repository, with <code>STANZA</code> set to the stanza name. Add <setting>--repo</setting> to the <cmd>pgbackrest</cmd> commands to check a repository other than the first one.</p>
|
||||
|
||||
<code-block>
|
||||
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
|
||||
</code-block>
|
||||
|
||||
<p>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.</p>
|
||||
</section>
|
||||
|
||||
<section id="openssl-1-0">
|
||||
<title>OpenSSL 1.0</title>
|
||||
|
||||
<p>Versions of <backrest/> 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.</p>
|
||||
</section>
|
||||
|
||||
<section id="remediation">
|
||||
<title>Remediation</title>
|
||||
|
||||
<list>
|
||||
<list-item>Upgrade to <backrest/> 2.59.3 or later, which reports an error when random data cannot be generated.</list-item>
|
||||
<list-item>If the subkey in <file>archive.info</file> or <file>backup.info</file> is weak, create the stanza in a new repository and keep the old repository only as long as its backups are needed.</list-item>
|
||||
<list-item>Consider making a new full backup after upgrading, since differential and incremental backups use the subkey of their full backup.</list-item>
|
||||
<list-item>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.</list-item>
|
||||
</list>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<!-- ======================================================================================================================= -->
|
||||
<section id="release-2-59-3" date="2026-10-04">
|
||||
<title><backrest/> 2.59.3 Released</title>
|
||||
|
||||
<p>The <backrest/> community is pleased to announce the release of <link url="{[backrest-url-base]}">{[project]}</link> 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.</p>
|
||||
|
||||
<p><backrest/> 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.</p>
|
||||
|
||||
<p><backrest/> can be installed from the <link url="https://yum.postgresql.org">{[postgres]} Yum Repository</link> or the <link url="https://apt.postgresql.org">{[postgres]} APT Repository</link> and packages are also available for many other distributions. Source code can be downloaded from <link page="release">releases</link>.</p>
|
||||
|
||||
<section id="feature">
|
||||
<title>Bug Fixes</title>
|
||||
|
||||
<list>
|
||||
<list-item>Fix possible weak encryption subkeys/salts (j0uinim)</list-item>
|
||||
<list-item>Fix possible checksum error loading encrypted info and manifest files (j0uinim)</list-item>
|
||||
</list>
|
||||
|
||||
<p>See the <link page="release" section="/2.59.3">2.59.3 Release Notes</link> for additional fixes and improvements.</p>
|
||||
</section>
|
||||
|
||||
<section id="note">
|
||||
<title>Important Notes</title>
|
||||
|
||||
<list>
|
||||
<list-item>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 <link url="{[backrest-url-base]}/news.html#weak-encryption">Weak Encryption Subkeys and Salts</link> for more information.</list-item>
|
||||
</list>
|
||||
</section>
|
||||
|
||||
<section id="link">
|
||||
<title>Links</title>
|
||||
|
||||
<list>
|
||||
<list-item><link url="{[backrest-url-base]}">Website</link></list-item>
|
||||
<list-item><link page="user-guide-index">User Guides</link></list-item>
|
||||
<list-item><link page="release">Release Notes</link></list-item>
|
||||
</list>
|
||||
</section>
|
||||
|
||||
<section id="Sponsorship">
|
||||
<title>Sponsorship</title>
|
||||
|
||||
<p>This release was made possible by the generous sponsorship of <link url="https://aws.amazon.com">AWS</link>, <link url="https://supabase.com">Supabase</link>, <link url="https://pgedge.com">pgEdge</link>, <link url="https://tigerdata.com">Tiger Data</link>, <link url="https://percona.com">Percona</link>, <link url="https://eon.io">Eon</link>, <link url="https://xata.io">Xata</link>, <link url="https://dalibo.com">Dalibo</link>, and <link url="https://dataegret.com/">Data Egret</link>.</p>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<!-- ======================================================================================================================= -->
|
||||
<section id="release-2-59-2" date="2026-09-27">
|
||||
<title><backrest/> 2.59.2 Released</title>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE doc [
|
||||
<!ENTITY v2.60.0 SYSTEM "release/2020s/2026/2.60.0.xml">
|
||||
<!ENTITY v2.59.3 SYSTEM "release/2020s/2026/2.59.3.xml">
|
||||
<!ENTITY v2.59.2 SYSTEM "release/2020s/2026/2.59.2.xml">
|
||||
<!ENTITY v2.59.1 SYSTEM "release/2020s/2026/2.59.1.xml">
|
||||
<!ENTITY v2.59.0 SYSTEM "release/2020s/2026/2.59.0.xml">
|
||||
@@ -139,6 +140,7 @@
|
||||
|
||||
<release-list>
|
||||
&v2.60.0;
|
||||
&v2.59.3;
|
||||
&v2.59.2;
|
||||
&v2.59.1;
|
||||
&v2.59.0;
|
||||
|
||||
35
doc/xml/release/2020s/2026/2.59.3.xml
Normal file
35
doc/xml/release/2020s/2026/2.59.3.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<release date="2026-10-04" version="2.59.3" title="Weak Encryption Subkey Bug">
|
||||
<release-core-list>
|
||||
<text>
|
||||
<p><b>IMPORTANT NOTE</b>: 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 <link page="news" section="/weak-encryption">Weak Encryption Subkeys and Salts</link> for more information.</p>
|
||||
</text>
|
||||
|
||||
<release-bug-list>
|
||||
<release-item>
|
||||
<github-issue id="2866"/>
|
||||
<github-pull-request id="2868"/>
|
||||
|
||||
<release-item-contributor-list>
|
||||
<release-item-contributor id="j0uinim"/>
|
||||
<release-item-reviewer id="david.steele"/>
|
||||
</release-item-contributor-list>
|
||||
|
||||
<p>Fix possible checksum error loading encrypted info and manifest files.</p>
|
||||
</release-item>
|
||||
|
||||
<release-item>
|
||||
<github-issue id="2866"/>
|
||||
<github-pull-request id="2867"/>
|
||||
|
||||
<release-item-contributor-list>
|
||||
<release-item-contributor id="j0uinim"/>
|
||||
<release-item-reviewer id="david.steele"/>
|
||||
<release-item-reviewer id="stefan.fercot"/>
|
||||
<release-item-reviewer id="douglas.j.hunley"/>
|
||||
</release-item-contributor-list>
|
||||
|
||||
<p>Fix possible weak encryption subkeys/salts.</p>
|
||||
</release-item>
|
||||
</release-bug-list>
|
||||
</release-core-list>
|
||||
</release>
|
||||
@@ -2,38 +2,8 @@
|
||||
<release-core-list>
|
||||
<text>
|
||||
<p><b>IMPORTANT NOTE</b>: The <cmd>restore</cmd> 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 <cmd>expire</cmd> 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 <br-option>checksum-page-error=n</br-option> to warn instead of erroring.</p>
|
||||
|
||||
<p><b>IMPORTANT NOTE</b>: In prior versions it was possible for weak encryption subkeys and salts to be generated if there was an error accessing system random data.</p>
|
||||
</text>
|
||||
|
||||
<release-bug-list>
|
||||
<release-item>
|
||||
<github-issue id="2866"/>
|
||||
<github-pull-request id="2868"/>
|
||||
|
||||
<release-item-contributor-list>
|
||||
<release-item-contributor id="j0uinim"/>
|
||||
<release-item-reviewer id="david.steele"/>
|
||||
</release-item-contributor-list>
|
||||
|
||||
<p>Fix possible checksum error loading encrypted info and manifest files.</p>
|
||||
</release-item>
|
||||
|
||||
<release-item>
|
||||
<github-issue id="2866"/>
|
||||
<github-pull-request id="2867"/>
|
||||
|
||||
<release-item-contributor-list>
|
||||
<release-item-contributor id="j0uinim"/>
|
||||
<release-item-reviewer id="david.steele"/>
|
||||
<release-item-reviewer id="stefan.fercot"/>
|
||||
<release-item-reviewer id="douglas.j.hunley"/>
|
||||
</release-item-contributor-list>
|
||||
|
||||
<p>Fix possible weak encryption subkeys/salts.</p>
|
||||
</release-item>
|
||||
</release-bug-list>
|
||||
|
||||
<release-feature-list>
|
||||
<release-item>
|
||||
<github-issue id="2687"/>
|
||||
|
||||
Reference in New Issue
Block a user