
CVE-2025-20352 SNMP Exposure Check (onesixtyone + parser)
فحص سريع وآمن من نوع الصندوق الأسود للتعرض لأجهزة Cisco IOS/IOS XE المتعلقة بـ CVE-2025-20352 (نظام SNMP الفرعي):
sysDescr.0 عبر برنامج Python صغير لتحديد أجهزة Cisco IOS/IOS XE ووضع علامة الإصدارات على أنها مُصلَحة (إذا كانت في القائمة البيضاء) أو قد تكون عرضة للخطر (تحقق من خلال مدقق برامج Cisco).هذا المشروع لا يستغل أي ثغرة. إنه فقط يحدد الأجهزة التي تستجيب لمجتمعات SNMP الافتراضية ويستخرج معلومات الإصدار من
sysDescr.0.
# 0) استنساخ هذا المستودع
git clone https://github.com/scadastrangelove/CVE-2025-20352 cve-2025-20352-scan
cd cve-2025-20352-scan
# 1) تثبيت التبعيات (Ubuntu/Debian)
sudo add-apt-repository -y universe
sudo apt update
sudo apt install -y onesixtyone snmp python3
# 2) إنشاء قائمة مجتمعات صغيرة مع الإعدادات الافتراضية
printf "public\nprivate\n" > communities.txt
# 3) مسح الشبكات الفرعية (قم بتعديلها!)
onesixtyone -c communities.txt 192.168.2.0/24 10.1.2.0/24 | tee snmp_raw.txt
# 4) تحليل النتائج إلى CSV
python3 ios_cve20352_parser.py < snmp_raw.txt > parsed.csv
# 5) عرض بشكل منظم
column -s, -t < parsed.csv | less -S
أعمدة parsed.csv:
ip — عنوان IP الهدفcommunity — مجتمع SNMP الذي عملvendor — Cisco / Non-Ciscoos_family — IOS، IOS XE، أو فارغversion — سلسلة الإصدار المستخرجة من الشعارstatus — مُصلَح، قد يكون عرضة للخطر (تحقق من خلال مدقق برامج Cisco)، أو ليس Cisco / ليس IOSraw — سطر الشعار الأصليمثال
ip,community,vendor,os_family,version,status,raw
1.1.2.4,public,Cisco,IOS,15.5(3)S2,قد يكون عرضة للخطر — IOS 15.5(3)S2؛ تحقق من خلال مدقق برامج Cisco,"Cisco IOS Software, ASR1000 ... Version 15.5(3)S2 ..."
1.1.2.2,public,Non-Cisco,,,ليس Cisco / ليس IOS,RouterOS RB750r2
ios_cve20352_parser.py يقرأ من الإدخال القياسي (أو ملف) سطورًا مثل:
<ip> [<community>] <sysDescr...>
يستخرج إصدارات Cisco IOS/IOS XE ويصنفها.
الإصدارات المُصلَحة موجودة في قائمة بيضاء صغيرة داخل البرنامج:
FIXED_WHITELIST = {
"IOS": {
# أضف إصدارات IOS 15.x المُصلَحة الدقيقة التي تؤكدها من خلال مدقق برامج Cisco
# مثال: "15.9(3)M12": True
},
"IOS XE": {
"17.15.4a": True
# أضف المزيد مع نشر/تأكيد Cisco (مثال: "17.15.4b": True)
}
}
لماذا قائمة بيضاء؟ يوجه تنبيه Cisco المسؤولين إلى مدقق برامج Cisco لمعرفة الإصدارات المتأثرة/المُصلَحة بدقة لكل خط إصدار/منصة. لذلك يتحوط البرنامج في الجانب الآمن: إذا لم يكن إصدار Cisco IOS/IOS XE في القائمة المُصلَحة، يتم وضع علامة "قد يكون عرضة للخطر" ويجب التحقق منه في المدقق.
sudo add-apt-repository -y universe
sudo apt update
sudo apt install -y onesixtyone snmp python3
# قد يكون onesixtyone في EPEL؛ وإلا قم بالبناء من المصدر
sudo dnf install -y net-snmp-utils python3 git make gcc
git clone https://github.com/trailofbits/onesixtyone.git
cd onesixtyone && make && sudo make install
printf "public\nprivate\n" > communities.txt
onesixtyone -c communities.txt 192.168.2.0/24 10.1.2.0/24 | tee snmp_raw.txt
نصائح:
أضف -w 1 لتقليل وقت الانتظار لكل مضيف (أسرع)، أو قم بإزالته إذا رأيت مهلات زمنية.
للحصول على شعار مضيف واحد مباشر:
snmpget -v2c -c public -t 1 -r 0 <IP> 1.3.6.1.2.1.1.1.0
python3 ios_cve20352_parser.py < snmp_raw.txt > parsed.csv
column -s, -t < parsed.csv | less -S
sysDescr.0 مباشرة باستخدام snmpget.FIXED_WHITELIST.هذا المشروع مرخص بموجب رخصة MIT. راجع ملف LICENSE للنص الكامل.
Проект распространяется по лицензии MIT. Полный текст — в файле LICENSE.
Быстрая и безопасная оценка экспозиции устройств Cisco IOS/IOS XE, связанная с CVE-2025-20352 (подсистема SNMP):
sysDescr.0 Python-скриптом: помечаем Cisco IOS/IOS XE и проставляем статус Fixed (если в белом списке) или Potentially Vulnerable (проверить в Cisco Software Checker).Проект не эксплуатирует уязвимость. Он лишь определяет устройства, отвечающие на дефолтные SNMP-сообщества, и извлекает версию из
sysDescr.0.
# 0) Клонирование
git clone https://github.com/scadastrangelove/CVE-2025-20352 cve-2025-20352-scan
cd cve-2025-20352-scan
# 1) Зависимости (Ubuntu/Debian)
sudo add-apt-repository -y universe
sudo apt update
sudo apt install -y onesixtyone snmp python3
# 2) Файл сообществ
printf "public\nprivate\n" > communities.txt
# 3) Сканирование подсетей (ИЗМЕНИТЕ ПОД СЕБЯ!)
onesixtyone -c communities.txt 192.168.2.0/24 10.1.2.0/24 | tee snmp_raw.txt
# 4) Парсинг в CSV
python3 ios_cve20352_parser.py < snmp_raw.txt > parsed.csv
# 5) Просмотр
column -s, -t < parsed.csv | less -S
Столбцы parsed.csv:
ip — IP-адресcommunity — сработавшее SNMP-сообществоvendor — Cisco / Non-Ciscoos_family — IOS, IOS XE или пустоversion — строка версии из баннераstatus — Fixed, Potentially Vulnerable (проверить в Cisco Software Checker) или Not Cisco / Not IOSraw — исходная строка баннераПример
ip,community,vendor,os_family,version,status,raw
1.1.2.4,public,Cisco,IOS,15.5(3)S2,Potentially Vulnerable — IOS 15.5(3)S2; verify in Cisco Software Checker,"Cisco IOS Software, ASR1000 ... Version 15.5(3)S2 ..."
1.1.2.2,public,Non-Cisco,,,Not Cisco / Not IOS,RouterOS RB750r2
ios_cve20352_parser.py читает строки вида:
<ip> [<community>] <sysDescr...>
Извлекает версии Cisco IOS/IOS XE и проставляет статус.
Исправленные версии перечисляются во внутреннем белом списке:
FIXED_WHITELIST = {
"IOS": {
# Добавляйте точные версии IOS 15.x после проверки в Cisco Software Checker
# напр. "15.9(3)M12": True
},
"IOS XE": {
"17.15.4a": True
# Дополняйте по мере публикаций/подтверждений (напр. "17.15.4b": True)
}
}
Почему белый список? В описании Cisco предлагается проверять конкретные сборки через Cisco Software Checker. Поэтому, если версия IOS/IOS XE не найдена в списке Fixed, скрипт ставит метку “Potentially Vulnerable”, дальше проверяйте её в чекере.
sudo add-apt-repository -y universe
sudo apt update
sudo apt install -y onesixtyone snmp python3
# onesixtyone может быть в EPEL; иначе соберите из исходников
sudo dnf install -y net-snmp-utils python3 git make gcc
git clone https://github.com/trailofbits/onesixtyone.git
cd onesixtyone && make && sudo make install
printf "public\nprivate\n" > communities.txt
onesixtyone -c communities.txt 192.168.2.0/24 10.1.2.0/24 | tee snmp_raw.txt
Подсказки:
Параметр -w 1 ускоряет опрос; уберите его, если видите таймауты.
Точечный баннер для узла:
snmpget -v2c -c public -t 1 -r 0 <IP> 1.3.6.1.2.1.1.1.0
python3 ios_cve20352_parser.py < snmp_raw.txt > parsed.csv
column -s, -t < parsed.csv | less -S
sysDescr.0 напрямую через snmpget.FIXED_WHITELIST подтверждёнными фикс-релизами.This project is licensed under the MIT License.
Проект распространяется по лицензии MIT.