HD-2024-1408

Exposition à l'information
Affectations
Node.js
16.20.2 LTS
en
Node.js
Node.js NES
Icône de cercle d'exclamation
Patch disponible
Cette vulnérabilité a été corrigée dans la version Never-Ending Support (NES) proposée par HeroDevs.

‍Overview

Undici est un client HTTP/1.1 haute performance écrit pour Node.js qui peut être utilisé à la place de la bibliothèque native. Une partie du standard Fetch indique que les en-têtes de requête interdits, tels que les cookies, ne doivent jamais être transmis au site cible lors d'une redirection. Les versions d'undici antérieures à la 5.26.2 n'ont pas réussi à le faire. (Notez que pour Node 16, ce problème ne se pose que lorsque l'option --experimental-fetch est utilisée).

Cette vulnérabilité peut être combinée avec l'exploit Open Redirect dans lequel un attaquant fait rediriger un serveur vers un site qu'il contrôle. Si des données sensibles, telles que des jetons d'autorisation, sont contenues dans le cookie, le site de destination (qui peut être contrôlé par l'attaquant) reçoit les données sensibles. 

Ce problème affecte les versions d'undici inférieures à 5.26.2.

Détails

Informations sur le module

Paquets concernés : unidici
Versions concernées : >5.26.2
Dépôt :https://github.com/nodejs/undici
Paquets publiés : unici
Gestionnaire de paquets : npm

Informations sur les vulnérabilités

Cette vulnérabilité de faible gravité est présente dans undici dans les versions inférieures à 5.26.2. 

undici peut être importée indépendamment et est également incluse dans la distribution de Node.js. En général, il est préférable de mettre à jour Node.js vers une version qui inclut la version corrigée de la bibliothèque plutôt que d'essayer de mettre à jour uniquement la bibliothèque undici.

Étapes de la reproduction

  • Importer une version vulnérable d'undici ou mettre en place une instance d'une version de Node.js qui contient une version vulnérable d'undici.
  • Utilisez le code ci-dessous, qui provient du test pour cette vulnérabilité qui est inclus dans la correction :
'use strict'
const { test } = require('tap')
const { createServer } = require('http')
const { once } = require('events')
const { fetch } = require('../..')

test('Cross-origin redirects clear forbidden headers', async (t) => {
  t.plan(5)
  const server1 = createServer((req, res) => {
    t.equal(req.headers.cookie, undefined)
    t.equal(req.headers.authorization, undefined)
    res.end('redirected')
  }).listen(0)
  const server2 = createServer((req, res) => {
    t.equal(req.headers.authorization, 'test')
    t.equal(req.headers.cookie, 'ddd=dddd')
    res.writeHead(302, {
      ...req.headers,
      Location: `http://localhost:${server1.address().port}`
    })
    res.end()
  }).listen(0)
  t.teardown(() => {
    server1.close()
    server2.close()
  })
  await Promise.all([
    once(server1, 'listening'),
    once(server2, 'listening')
  ])
  const res = await fetch(`http://localhost:${server2.address().port}`, {
    headers: {
      Authorization: 'test',
      Cookie: 'ddd=dddd'
    }
  })
  const text = await res.text()
  t.equal(text, 'redirected')
})

  • Notez que les lignes ci-dessous affirment que les en-têtes spécifiques ne sont pas définis :
t.equal(req.headers.cookie, non défini)
t.equal(req.headers.authorization, non défini)

  • Sur un système vulnérable, ces assertions échoueront car Server1 recevra les en-têtes Authorization et Cookie.

Il n'existe pas de solution de contournement.

Atténuation

undici est une bibliothèque populaire qui a été ajoutée dans Node 16 (en plus de la bibliothèque HTTP native). Tous les utilisateurs qui utilisent la version expérimentale de fetch doivent mettre à jour immédiatement. 

Ressources complémentaires

Détails de la vulnérabilité
ID
HD-2024-1408
PROJET concerné
Node.js
Versions concernées
16.20.2 LTS
Date de publication
15 octobre 2024
≈ Date fixe
11 octobre 2023
Fixé en
Sévérité
Faible
Catégorie
Exposition à l'information