
CVE-2025-20352 SNMP Exposure Check (onesixtyone + parser)
Fast, safe black-box exposure check for Cisco IOS/IOS XE devices related to CVE-2025-20352 (SNMP subsystem):
sysDescr.0 banners with a small Python script to flag Cisco IOS/IOS XE and mark versions as Fixed (if whitelisted) or Potentially Vulnerable (verify in Cisco Software Checker).This project does not exploit anything. It only identifies devices that respond to default SNMP communities and extracts version info from
sysDescr.0.
# 0) Clone this repo
git clone https://github.com/scadastrangelove/CVE-2025-20352 cve-2025-20352-scan
cd cve-2025-20352-scan
# 1) Install dependencies (Ubuntu/Debian)
sudo add-apt-repository -y universe
sudo apt update
sudo apt install -y onesixtyone snmp python3
# 2) Create a small community list with defaults
printf "public\nprivate\n" > communities.txt
# 3) Scan your subnets (EDIT THESE!)
onesixtyone -c communities.txt 192.168.2.0/24 10.1.2.0/24 | tee snmp_raw.txt
# 4) Parse the results to CSV
python3 ios_cve20352_parser.py < snmp_raw.txt > parsed.csv
# 5) View nicely
column -s, -t < parsed.csv | less -S
parsed.csv columns:
ip — target IPcommunity — SNMP community that workedvendor — Cisco / Non-Ciscoos_family — IOS, IOS XE, or emptyversion — version string extracted from bannerstatus — Fixed, Potentially Vulnerable (verify in Cisco Software Checker), or Not Cisco / Not IOSraw — original banner lineExample
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 reads from stdin (or a file) lines like:
<ip> [<community>] <sysDescr...>
It extracts Cisco IOS/IOS XE versions and labels them.
Fixed versions live in a small whitelist inside the script:
FIXED_WHITELIST = {
"IOS": {
# Add exact IOS 15.x fixed versions you confirm via Cisco Software Checker
# e.g. "15.9(3)M12": True
},
"IOS XE": {
"17.15.4a": True
# Add more as Cisco publishes/you confirm (e.g. "17.15.4b": True)
}
}
Why a whitelist? Cisco’s advisory points admins to the Cisco Software Checker for exact affected/fixed builds per train/platform. The script therefore errs on the safe side: if a Cisco IOS/IOS XE version isn’t in the fixed list, it’s marked “Potentially Vulnerable” and you should verify it in the checker.
sudo add-apt-repository -y universe
sudo apt update
sudo apt install -y onesixtyone snmp python3
# onesixtyone may be in EPEL; otherwise build from source
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
Tips:
Add -w 1 to lower wait time per host (faster), or remove it if you see timeouts.
For a direct single-host banner:
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 directly with snmpget.FIXED_WHITELIST.This project is licensed under the MIT License. See the LICENSE file for the full text.
Проект распространяется по лицензии 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.