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

- **Publicat el:** 2026-06-09
- **Categoria:** Seguretat
- **Pàgina original:** https://linuxgratis.com/ca/articles/cve-2026-45447-openssl-pkcs7-use-after-free

Un missatge S/MIME malformat pot alliberar un BIO que l'aplicació encara fa servir en cridar PKCS7_verify(). Afecta les branques 1.0.2, 1.1.1, 3.0, 3.4, 3.5, 3.6 i 4.0 d'OpenSSL.

---

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

- SecurityWeek — OpenSSL Patches High-Severity Vulnerability Found With AI: <https://www.securityweek.com/openssl-patches-high-severity-vulnerability-found-with-ai/>
- NVD — CVE-2026-45447: <https://nvd.nist.gov/vuln/detail/CVE-2026-45447>
