Remote Code Execution in pg
Affected releases · pg
- 7.x7.0.0 – 7.1.1Fixed in 7.1.2
- 6.x6.0.0 – 6.4.1Fixed in 6.4.2
- 5.x5.0.0 – 5.2.0Fixed in 5.2.1
- 4.x4.0.0 – 4.5.6Fixed in 4.5.7
- 3.x3.0.0 – 3.6.3Fixed in 3.6.4
- 2.x2.0.0 – 2.11.1Fixed in 2.11.2
- 1.x and older0.0.1 – 1.3.0No fix, no longer updated
On 7.x, the newest line:
npm install pg@7.1.2Not affected
8.0.0 – 8.23.1
56 releases, latest
Affected
7.0.0 – 7.0.1
2 releases
Fixed
7.0.2 – 7.0.3
2 releases
Affected
7.1.0 – 7.1.1
2 releases
Fixed
7.1.2 – 7.18.2
32 releases
Affected
6.0.0 – 6.0.4
5 releases
Fixed
6.0.5
1 release
Affected
6.1.0 – 6.1.5
6 releases
Fixed
6.1.6
1 release
Affected
6.2.2 – 6.2.4
3 releases
Fixed
6.2.5
1 release
Affected
6.3.0 – 6.3.1
2 releases
Fixed
6.3.3
1 release
Affected
6.4.0 – 6.4.1
2 releases
Fixed
6.4.2
1 release
Affected
5.0.0 – 5.2.0
3 releases
Fixed
5.2.1
1 release
Affected
4.0.0 – 4.5.6
19 releases
Fixed
4.5.7
1 release
Affected
3.0.0 – 3.6.3
18 releases
Fixed
3.6.4
1 release
Affected
2.0.0 – 2.11.1
22 releases
Fixed
2.11.2
1 release
Affected
1.0.0 – 1.3.0
11 releases
Affected
0.0.1 – 0.15.1
78 releases
Is your project affected?
Paste your package.json, or type the range you declare for pg. It is read in your browser and sent nowhere.
What happens
Affected versions of pg contain a remote code execution vulnerability that occurs when the remote database or query specifies a crafted column name.
There are two specific scenarios in which it is likely for an application to be vulnerable:
The application executes unsafe, user-supplied sql which contains malicious column names.
The application connects to an untrusted database and executes a query returning results which contain a malicious column name.
Proof of Concept
const { Client } = require('pg')
const client = new Client()
client.connect()
const sql = `SELECT 1 AS "\\'/*", 2 AS "\\'*/\n + console.log(process.env)] = null;\n//"`
client.query(sql, (err, res) => {
client.end()
})Recommendation
Version 2.x.x: Update to version 2.11.2 or later.
Version 3.x.x: Update to version 3.6.4 or later.
Version 4.x.x: Update to version 4.5.7 or later.
Version 5.x.x: Update to version 5.2.1 or later.
Version 6.x.x: Update to version 6.4.2 or later. ( Note that versions 6.1.6, 6.2.5, and 6.3.3 are also patched. )
Version 7.x.x: Update to version 7.1.2 or later. ( Note that version 7.0.2 is also patched. )