
CVE-2025-20352 SNMP Exposure Check (onesixtyone + parser)
CVE-2025-20352 (SNMP 서브시스템)와 관련된 Cisco IOS/IOS XE 장치에 대한 빠르고 안전한 블랙박스 노출 점검입니다:
sysDescr.0 배너를 파싱하여 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 — 대상 IPcommunity — 작동한 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": {
# Cisco Software Checker를 통해 확인한 정확한 IOS 15.x 수정 버전을 추가하세요
# 예: "15.9(3)M12": True
},
"IOS XE": {
"17.15.4a": True
# Cisco가 발표하거나 확인함에 따라 더 추가하세요 (예: "17.15.4b": True)
}
}
왜 화이트리스트인가요? Cisco의 권고는 관리자가 Cisco Software Checker를 사용하여 트레인/플랫폼별 정확한 영향/수정 빌드를 확인하도록 안내합니다. 따라서 스크립트는 안전한 쪽으로 오류를 범합니다. Cisco IOS/IOS XE 버전이 수정 목록에 없으면 **"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
snmpget으로 sysDescr.0을 직접 조회하세요.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.