← Tornar als articles
Seguretat· 3 min de lectura

OpenSSL corregeix un use-after-free a PKCS#7 que pot acabar en execució de codi (CVE-2026-45447)

OpenSSL va publicar el 9 de juny de 2026 un pedaç per a un error d’ús després d’alliberar (use-after-free) a la seva API antiga de PKCS#7. El bug, identificat com a CVE-2026-45447, viu a la funció PKCS7_verify(), la que verifica signatures PKCS#7 i missatges S/MIME. Va ser un dels primers errors d’OpenSSL descoberts amb ajuda d’eines d’IA durant una revisió del codi.

Què passa exactament

PKCS7_verify() rep del programa que la crida un objecte BIO on escriure el contingut verificat. Quan processa un missatge signat en què el camp digestAlgorithms del SignedData ve com un SET d’ASN.1 buit, OpenSSL allibera aquest BIO per error, tot i que la propietat continua sent del programa que va fer la crida. A partir d’aquí, qualsevol accés de l’aplicació a aquell BIO ja alliberat és un use-after-free (CWE-416).

Les conseqüències depenen del comportament de l’assignador de memòria i de com faci servir l’aplicació el BIO després. En el cas benigne hi ha una caiguda del procés. En el pitjor, hi ha corrupció del heap i, segons l’escenari, possibilitat d’execució remota de codi.

A qui afecta

El problema és a l’API antiga de PKCS#7. La superfície d’atac és qualsevol programa que cridi PKCS7_verify() sobre dades que rep de fora. Els clients de correu i els MTA que validen signatures S/MIME són el cas més exposat, perquè el mateix missatge signat és el payload: no cal autenticació ni interacció de l’usuari més enllà de processar el correu.

Les versions afectades abasten gairebé totes les branques vives d’OpenSSL:

  • 4.0.0 (corregida a 4.0.1)
  • 3.6.0 fins a 3.6.2 (corregida a 3.6.3)
  • 3.5.0 fins a 3.5.6 (corregida a 3.5.7)
  • 3.4.0 fins a 3.4.5 (corregida a 3.4.6)
  • 3.0.0 fins a 3.0.20 (corregida a 3.0.21)
  • 1.1.1 fins a 1.1.1zg (1.1.1zh, només suport premium)
  • 1.0.2 fins a 1.0.2zp (1.0.2zq, només suport premium)

Gravetat

El CVSS v3.1 assignat és de 9.8: vector de xarxa, complexitat baixa, sense privilegis ni interacció. És la nota màxima de “crítica”, encara que cal matisar-la. Que un error acabi en execució de codi depèn molt de com gestioni l’aplicació el BIO després de la crida. Molts programes simplement cauran. Tot i així, no és cosa per deixar pendent, sobretot en servidors de correu que processen S/MIME sense supervisió.

Mitigació

Actualitza la llibreria OpenSSL a la versió amb el pedaç de la teva branca. En una distribució de Linux això sol arribar com una actualització del paquet del sistema (openssl, libssl3 o equivalent), de manera que n’hi ha prou a aplicar les actualitzacions de seguretat i reiniciar els serveis que enllacen contra la llibreria. Recorda que molts serveis carreguen OpenSSL un sol cop en arrencar, així que reiniciar-los és necessari perquè agafin el codi corregit.

Si mantens codi propi, hi ha una alternativa que evita l’error d’arrel: migrar de l’API antiga PKCS7_verify() a les API CMS d’OpenSSL, que no estan afectades. És el camí recomanat des de fa temps per tractar missatges signats.

Font