
nginx 및 Apache용 트리거 인식 웹 서버 CVE 감사. 버전 일치를 넘어 취약한 코드 경로가 구성에서 실제로 도달 가능한지 확인. 결과를 활성 / 잠재 / 미검증으로 분류. 단일 파일 Python 3.5+, 종속성 없음.
취약한지 묻지 마세요. 익스플로잇 가능한지 물으세요.
nginx 및 Apache의 알려진 CVE에 대해 설치된 버전 과 취약한 코드 경로가 설정을 통해 실제로 도달 가능한지 여부를 모두 확인하는 단일 파일 Python 도구입니다.
대부분의 CVE 스캐너는 버전 매칭에서 멈춥니다: "nginx 1.18.0 — CVE-2026-42945, HIGH 심각도, 취약합니다." 하지만 많은 CVE는 익스플로잇 가능하려면 특정 설정 패턴이 필요합니다. 구성을 무시하는 스캐너는 실제 위험을 반영하지 않는 빨간 경보로 당신을 압도할 뿐만 아니라, 더 나쁘게는 내일 설정이 변경되면 실제로 현실이 될 잠재적 위험을 숨길 수 있습니다.
web_server_audit는 CVE당 두 가지 별개의 질문에 답합니다:
이 둘을 결합하면 세 가지 정직한 분류를 얻을 수 있습니다:
| Classification | Meaning |
|---|---|
| 🔴 Active exploitation risk | 취약한 버전 그리고 트리거 존재함. 오늘 익스플로잇 가능. |
| 🟡 Latent risk | 취약한 버전, 트리거 없음. 구성 변경으로 패턴이 도입되면 익스플로잇 가능해짐. |
| ⚪ Unverified | 구성 읽을 수 없음; 상태 알 수 없음. |
git clone https://github.com/YOUR_USERNAME/web-server-audit.git
cd web-server-audit
sudo python3 web_server_audit.py
| CVE | 심각도 | 트리거 패턴 |
|---|---|---|
| CVE-2026-42945 (Rift) | HIGH | rewrite + 이름 없는 캡처($1,$2) + 치환 문자열 내 ? |
| CVE-2026-42946 | MEDIUM | scgi_pass 또는 uwsgi_pass 사용 중 |
| CVE-2026-40701 | MEDIUM | ssl_stapling on + resolver 함께 있음 |
| CVE-2026-42934 | LOW | charset/charset_types/source_charset 지시어 |
Apache CVE 목록은 현재 비어 있지만 구조는 마련되어 있습니다. 아래 Extending(확장) 참조.
CVE 외에도 도구는 다음을 보고합니다:
/proc/sys/kernel/randomize_va_space) — 완전한 ASLR은 메모리 버그의 RCE 익스플로잇 가능성을 실질적으로 낮춥니다esm-infra 및 esm-apps 상태nginx, apache2, systemctl, ss, journalctl이 있으면 사용하고, 없으면 정상적으로 건너뜀# 간결한 보고서 (기본값 — OK 줄 숨김)
sudo python3 web_server_audit.py
# OK 줄 포함한 모든 결과
sudo python3 web_server_audit.py --verbose
# ANSI 색상 없음 (파이프, 로그, CI 출력에 적합)
sudo python3 web_server_audit.py --no-color
# 기계 판독 가능 JSON
sudo python3 web_server_audit.py --json
| 코드 | 의미 |
|---|---|
| 0 | 문제 없음 |
| 1 | 경고 또는 CVE가 아닌 중요 발견사항만 있음 |
| 2 | 하나 이상의 CVE가 활성 익스플로잇 가능 |
종료 코드 2는 자연스러운 CI/CD 실패 신호입니다.
========================================================================
Web Server Audit - 2026-05-16T01:24:55
Host: web-prod-01
web_server_audit.py v1.0.0 - SiberSAN - MIT License
========================================================================
[system]
------------------------------------------------------------------------
[OK] OK ASLR fully enabled (randomize_va_space=2)
[i] INFO OS: Ubuntu 18.04.6 LTS
[!] WARN Ubuntu 18.04 is in ESM-only support
[nginx] version 1.18.0 (active)
------------------------------------------------------------------------
[i] INFO nginx listening on: 0.0.0.0:80, 0.0.0.0:443
[i] INFO CVE-2026-42945 (HIGH): version vulnerable but NOT triggered
Trigger: rewrite + unnamed capture ($1,$2) + '?' in replacement
Evidence: No rewrite directives in configuration
[i] INFO CVE-2026-42946 (MEDIUM): version vulnerable but NOT triggered
[!] WARN nginx installed from PPA (1.18.0-3ubuntu1+bionic1)
========================================================================
Real-risk summary
------------------------------------------------------------------------
ACTIVE EXPLOITATION RISK: none detected.
LATENT RISK - vulnerable version, no trigger in config (3):
- [nginx] CVE-2026-42945 (HIGH)
- [nginx] CVE-2026-42946 (MEDIUM)
- [nginx] CVE-2026-42934 (LOW)
These become exploitable if config changes introduce the trigger.
Mitigation: config-change discipline + plan upgrade.
========================================================================
Findings: 0 critical, 2 warnings
========================================================================
새 CVE를 추가하는 데는 두 단계가 필요합니다.
1. 전체 구성 텍스트(nginx -T 출력)를 받아 (triggered: bool, evidence: str)를 반환하는 트리거 함수를 작성합니다:
def _trigger_my_cve(conf):
hits = [l for l in conf.splitlines() if re.search(r'risky_directive', l)]
if hits:
return True, "Found: " + hits[0]
return False, "Pattern not present"
2. NGINX_CVES(또는 APACHE_CVES)에 항목을 추가합니다:
{
"id": "CVE-XXXX-NNNNN",
"name": "Descriptive name",
"severity": "HIGH",
"affected": ("1.10.0", "1.25.0"),
"fixed_in": ["1.25.1"],
"trigger_desc": "Human-readable trigger description",
"trigger_fn": _trigger_my_cve,
},
이것으로 끝입니다. 프레임워크가 분류, 출력 형식, JSON, 종료 코드 및 실행 요약을 자동으로 처리합니다.
--verbose를 사용하여 세부 정보를 확인하십시오.풀 리퀘스트, 이슈, 새 CVE 탐지기, 그리고 추가 웹 서버(lighttpd, Caddy, HAProxy 등) 지원을 환영합니다.
새 CVE 탐지기를 제안할 때는 다음을 포함해 주십시오:
MIT 라이선스에 따라 배포됩니다.
Copyright (c) 2026 SiberSAN