Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
dnsmasq-cve-2026 — 자동 결함 검증 도구 for 6 dnsmasq CVEs (CVE-2026-2291, 4890, 4891, 4892, 4893, 5172) | Kitploit
도구/GitHubGitHub/jianrongxiao-linksys/dnsmasq-cve-2026
Vulnerability AnalysisExploitationFuzzingNetwork SecurityPenetration TestingBinary AnalysisDNS Analysis
GitHubjianrongxiao-linksys/dnsmasq-cve-2026

dnsmasq-cve-2026

자동 결함 검증 도구 for 6 dnsmasq CVEs (CVE-2026-2291, 4890, 4891, 4892, 4893, 5172)

저장소 보기
53개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

dnsmasq CVE-2026 QA 검증 도구

6가지 dnsmasq 취약점(2026년 5월)을 검증하는 자동화 블랙박스 도구입니다. 공격 패킷을 실제 DUT에 전송하고 PASS/FAIL을 보고합니다. 소스 코드 접근이 필요하지 않습니다.

빠른 시작

root@kitploit:~
# 먼저 GUI를 통해 DUT DNS를 노트북의 WAN IP로 설정한 후:
sudo python3 dnsmasq_cve_verify.py --laptop <YOUR_WAN_IP> --dut <DUT_LAN_IP> --dut-pass <SSH_PASS>

# 예시:
sudo python3 dnsmasq_cve_verify.py --laptop 10.0.0.211 --dut 192.168.1.1 --dut-pass '12345Asdf@'

테스트된 CVE

CVECVSS유형공격 벡터영향을 받는 기능
CVE-2026-22919.2힙 버퍼 오버플로우원격extract_name() — 항상 활성
CVE-2026-51727.5범위 밖 읽기 / 크래시원격extract_addresses() — 항상 활성
CVE-2026-48907.5무한 루프 DoS원격NSEC 비트맵 파싱 (--dnssec)
CVE-2026-48915.3힙 범위 밖 읽기원격RRSIG 검증 (--dnssec)
CVE-2026-48928.4힙 오버플로우 → 루트 권한 획득로컬/인접DHCPv6 CLID (--dhcp-script + DHCPv6)
CVE-2026-48935.3검증 우회원격ECS 소스 확인 (--add-subnet)

각 테스트 작동 방식

CVE-2026-2291 (심각 — extract_name의 힙 오버플로우)

원인: union bigname은 char name[MAXDNAME]을 선언하지만, 이스케이프된 문자는 이름을 2*MAXDNAME+1 바이트로 확장할 수 있어 힙 오버플로우가 발생합니다.

테스트 방법: 내부적으로 \DDD 이스케이프(입력 바이트당 4바이트)되는 상위 비트 문자(0x80+)가 포함된 도메인 이름을 포함한 DNS 쿼리를 전송합니다. dnsmasq가 크래시되거나 응답을 멈추면 취약한 것입니다.

패치된 동작: 과도하게 큰 이름을 정상적으로 거부(FORMERR/REFUSED)하거나 버퍼를 확장합니다.

CVE-2026-5172 (높음 — extract_addresses의 범위 밖 읽기)

원인: 위조된 rdlen 필드로 인해 extract_name()이 포인터를 레코드 끝 이상으로 진행시킬 수 있습니다. 남은 바이트 언더플로우로 인해 큰 값이 생성되어 대규모 범위 밖 읽기 → 크래시가 발생합니다.

테스트 방법: rdlen이 실제 인코딩된 이름보다 작은 CNAME 레코드가 포함된 DNS 응답을 전송합니다. dnsmasq가 크래시되면 취약한 것입니다.

패치된 동작: extract_name() 후 포인터가 선언된 rdlen 경계 내에 머무르는지 검증합니다.

CVE-2026-4890 (높음 — DNSSEC NSEC 무한 루프)

원인: NSEC 유형 비트맵 파싱이 p[1]+2 대신 p[1]만큼 진행됩니다(윈도우 헤더 크기 누락). bitmap_length=0이면 포인터가 절대 진행되지 않아 무한 루프가 발생합니다.

테스트 방법: window=0, bitmap_length=0으로 조작된 NSEC 레코드를 전송합니다. dnsmasq가 모든 쿼리에 응답하지 않으면(크래시가 아닌 멈춤) 취약한 것입니다. RRSIG 검증 전에 악용 가능합니다.

패치된 동작: p[1]+2만큼 진행하고 길이가 0인 비트맵을 건너뜁니다.

CVE-2026-4891 (보통 — RRSIG 힙 범위 밖 읽기)

원인: RRSIG의 rdlen이 최소 크기(18 + 서명자 이름)에 대해 검증되지 않습니다. 계산된 서명 길이가 음수로 언더플로우되어 큰 값으로 처리 → 범위 밖 읽기가 발생합니다.

테스트 방법: rdlen=10(최소 31+ 바이트보다 훨씬 낮음)인 RRSIG 레코드를 전송합니다. 크래시 = 취약함.

패치된 동작: 서명 길이를 계산하기 전에 rdlen >= 고정_필드 + 서명자_이름_길이를 검증합니다.

CVE-2026-4892 (높음 — DHCPv6 CLID 로컬 루트)

원인: DHCPv6 CLID(최대 65535바이트)가 sprintf("%.2x")를 통해 daemon->packet(5131바이트)으로 16진수 인코딩됩니다. 3000바이트 CLID → 6000바이트 16진수 문자열 → 오버플로우. 헬퍼 프로세스가 root로 실행됩니다.

테스트 방법: 3000바이트 클라이언트 식별자가 포함된 DHCPv6 SOLICIT을 전송합니다. IPv6 인접성과 --dhcp-script 구성이 필요합니다. 헬퍼 크래시 = 취약함.

패치된 동작: 16진수 인코딩 전에 CLID 길이를 자르거나 검증합니다.

참고: 일부 빌드는 -DNO_DHCP6로 컴파일되며 이 CVE의 영향을 받지 않습니다.

CVE-2026-4893 (보통 — ECS 소스 검증 우회)

원인: process_reply()가 전체 패킷 길이 대신 OPT 레코드 길이(~23바이트)를 check_source()에 전달합니다. 모든 경계 검사가 실패하여 함수가 항상 1(유효)을 반환합니다.

테스트 방법: 위조된 소스 프리픽스가 포함된 EDNS 클라이언트 서브넷 옵션이 있는 DNS 쿼리를 전송합니다. dnsmasq가 검증 없이 ECS를 다시 에코하면 취약한 것입니다.

패치된 동작: 전체 패킷 길이를 check_source()에 전달하여 RFC 7871 섹션 9.2에 따른 적절한 경계 검사를 활성화합니다.

수정 방법

dnsmasq 2.92rel2로 업그레이드 (권장)

  • 소스: https://thekelleys.org.uk/dnsmasq/dnsmasq-2.92rel2.tar.xz
  • 업스트림 패치: https://thekelleys.org.uk/dnsmasq/CVE/

자동화된 결함 검증 도구 (dnsmasq_cve_verify.py)

주요 QA 도구입니다. 테스트 노트북에서 실행되며 DUT에 공격 패킷을 전송하고 각 CVE에 대해 명확한 PASS/FAIL을 보고합니다. 상태 검사를 위한 읽기 전용 SSH 액세스 외에는 DUT 수정이 필요하지 않습니다.

네트워크 토폴로지

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────┐
│                        테스트 노트북                                │
│                                                                      │
│   LAN 인터페이스                   WAN 인터페이스                    │
│   <LAPTOP_LAN_IP>                 <LAPTOP_WAN_IP>                   │
│        │                               │                            │
│        │                          ┌────┴──────────────┐             │
│        │                          │ 악성 DNS         │             │
│        │                          │ 서버 (포트 53)   │             │
│        │                          └────┬──────────────┘             │
│        │                               │                            │
└────────┼───────────────────────────────┼────────────────────────────┘
         │ LAN 서브넷                    │ WAN 서브넷
         │                               │
┌────────┼───────────────────────────────┼────────────────────────────┐
│        │                               │                            │
│   LAN: <DUT_LAN_IP>              WAN: <DUT_WAN_IP>                  │
│   (LAN 게이트웨이)                (WAN 업링크)                      │
│                                                                      │
│              DUT (Linksys 라우터)                                    │
│              dnsmasq (2.92rel2 미만 모든 버전)                      │
│                                                                      │
│   resolv-file=/etc/resolv.conf                                      │
│   → nameserver <LAPTOP_WAN_IP>  ← GUI로 설정, 우리에게 전달        │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

데이터 흐름:
  1. 도구가 DUT LAN IP(포트 53)로 DNS 쿼리 전송
  2. DUT의 dnsmasq가 로컬에서 해결 불가 → 업스트림(LAPTOP_WAN_IP)으로 전달
  3. WAN 인터페이스의 악성 서버가 익스플로잇 페이로드로 응답
  4. DUT의 dnsmasq가 악성 응답 처리 → 크래시/멈춤/생존
  5. 도구가 SSH(읽기 전용)로 DUT 상태 확인

예시 설정 (실제 IP는 다를 수 있음):

역할IP (예시)
노트북 LAN192.168.1.254
노트북 WAN10.0.0.211
DUT LAN192.168.1.1
DUT WAN10.0.0.214

핵심 요구 사항: 노트북 WAN IP와 DUT WAN IP가 동일한 서브넷에 있어야 DUT가 업스트림 DNS 서버로 노트북에 연결할 수 있습니다.

작동 방식

root@kitploit:~
┌──────────┐     ┌───────────┐     ┌──────────────────┐     ┌──────────┐
│  SETUP   │ ──► │  TRIGGER  │ ──► │  STATE INSPECT   │ ──► │  VERDICT │
│          │     │           │     │                  │     │          │
│ 시작     │     │ DNS 쿼리  │     │ SSH로 DUT 확인:  │     │ PASS:    │
│ 악성 DNS │     │ DUT→DUT   │     │ - pidof dnsmasq  │     │ 생존     │
│ 서버를   │     │ 전달→우리 │     │ - PID 변경?      │     │          │
│ WAN      │     │ 익스플로잇│     │ - dmesg 크래시?  │     │ FAIL:    │
│ 인터페이 │     │ 페이로드  │     │ - /var/log/msg   │     │ 크래시/  │
│ 스에 시작│     │ 로 응답   │     │                  │     │ 멈춤     │
│ (10.0.0. │     │           │     │ 생존 쿼리        │     │          │
│  211:53) │     │           │     │ (version.bind)   │     │          │
└──────────┘     └───────────┘     └──────────────────┘     └──────────┘

참고: 도구는 DUT 설정을 수정하지 않습니다. 사용자는 GUI를 통해 DNS를 10.0.0.211로 설정해야 합니다.

QA 테스트 절차

사전 요구 사항

  • 두 개의 네트워크 인터페이스(LAN + WAN)가 있는 테스트 노트북
  • paramiko가 설치된 Python 3.6+ (pip install paramiko)
  • DUT에 대한 SSH 액세스 (루트 자격 증명)
  • 접근 가능한 DUT 관리자 GUI

1단계: 물리적 연결

테스트 노트북을 DUT에 두 개의 케이블로 연결합니다:

노트북 포트연결 대상목적
LAN 포트DUT LAN 포트SSH 접속 + DUT로 DNS 쿼리 전송
WAN 포트DUT WAN 서브넷 (예: 업스트림 스위치/모뎀 포트)업스트림 DNS 서버 역할

연결 후 노트북의 IP를 확인합니다:

root@kitploit:~
# IP 확인
ip addr show | grep "inet "
# 예시 출력:
#   inet 192.168.1.254/24 ...  ← LAN IP
#   inet 10.0.0.211/24 ...     ← WAN IP (--laptop에 사용)

2단계: GUI를 통해 DUT DNS를 노트북으로 설정

  1. 브라우저를 열고 DUT 관리 페이지로 이동:
    • 예: http://192.168.1.1 또는 http://myrouter.local
  2. 관리자 자격 증명으로 로그인
  3. 다음으로 이동: Connectivity → Internet Settings → Edit (IPv4 옆)
  4. DNS 아래: Static DNS 선택
  5. DNS 1을 노트북의 WAN IP(예: 10.0.0.211)로 설정
  6. Apply 클릭
  7. 5-10초 기다려 설정이 적용되도록 함

3단계: 도구 실행

root@kitploit:~
cd /path/to/dnsmasq-cve-2026/

# 6개 CVE 테스트 모두 실행:
sudo python3 dnsmasq_cve_verify.py --laptop <YOUR_WAN_IP> --dut <DUT_LAN_IP> --dut-pass <SSH_PASSWORD>

# 예시:
sudo python3 dnsmasq_cve_verify.py --laptop 10.0.0.211 --dut 192.168.1.1 --dut-pass '12345Asdf@'

도구는 다음을 수행합니다:

  1. DUT에 SSH 연결(읽기 전용)
  2. 노트북의 WAN IP에서 악성 DNS 서버 시작
  3. DUT가 DNS 쿼리를 해당 IP로 전달하는지 확인
  4. 각 CVE에 대한 익스플로잇 페이로드 전송
  5. dnsmasq가 크래시 또는 멈췄는지 확인
  6. CVE별 PASS/FAIL 보고

4단계: 결과 읽기

  • PASS = DUT 안전 (기능이 활성화되지 않았거나 공격에서 생존)
  • FAIL = dnsmasq 크래시 또는 멈춤 (취약!)
  • ERROR = 연결 불가 또는 DUT가 전달하지 않음

5단계: DUT DNS 복원

  1. DUT 관리자 GUI로 돌아가기
  2. Connectivity → Internet Settings → Edit
  3. DNS 아래: Automatic (from ISP) 선택 또는 정적 항목 제거
  4. Apply 클릭

문제 해결

문제해결 방법
"DUT가 우리에게 쿼리를 전달하지 않음"2단계가 올바르게 수행되었는지 확인. GUI에 입력한 노트북 WAN IP를 확인하세요.
"DUT에 연결할 수 없음"SSH 자격 증명 확인. 수동으로 시도: ssh [email protected]
"포트 53을 바인딩할 수 없음"sudo로 실행. 또는 --dns-port 5353 사용 (수동 DUT 설정 필요).
"버전: 알 수 없음"DUT에 dnsmasq가 표준 경로에 없을 수 있음. 도구는 여전히 올바르게 테스트합니다.

테스트 결과 (2026-05-31)

dnsmasq 2.78 플랫폼 (전체: PASS)

CVE결과이유
CVE-2026-2291PASSDNSSEC 미컴파일
CVE-2026-4890PASSDNSSEC 미컴파일
CVE-2026-4891PASSDNSSEC 미컴파일
CVE-2026-4892PASSdnsmasq가 DHCPv6 제공 안 함 (별도 DHCPv6 서버 사용)
CVE-2026-4893PASS논리 버그만 — 크래시 없음
CVE-2026-5172PASS익스플로잇에서 생존 (취약 코드 경로가 2.78에 없음)

dnsmasq 2.90 플랫폼 (전체: PASS)

CVE결과이유
CVE-2026-2291PASSDNSSEC 미컴파일
CVE-2026-4890PASSDNSSEC 미컴파일
CVE-2026-4891PASSDNSSEC 미컴파일
CVE-2026-4892PASSDHCPv6 미컴파일
CVE-2026-4893PASS논리 버그만 — 크래시 없음
CVE-2026-5172PASS익스플로잇 변종에서 생존

결론

테스트한 모든 Linksys 라우터는 프로덕션 빌드 구성에서 6개 CVE 모두에 대해 실질적으로 악용 가능하지 않습니다. 위험한 기능(DNSSEC, DHCPv6-통한-dnsmasq)이 컴파일되지 않았거나 구성되지 않았습니다. 심층 방어를 위해 패치를 적용하는 것이 여전히 권장됩니다.

예상 결과

패치 전 (dnsmasq 2.78, DNSSEC 미컴파일 빌드):

CVE결과이유
CVE-2026-2291PASSDNSSEC 미컴파일 — 악용 불가
CVE-2026-4890PASSDNSSEC 미컴파일 — 악용 불가
CVE-2026-4891PASSDNSSEC 미컴파일 — 악용 불가
CVE-2026-4892PASS/FAILDHCPv6 컴파일 + dhcp-script 활성화 여부
CVE-2026-4893PASS논리 버그 — 크래시 없음 (버전 기반만)
CVE-2026-5172PASSblockdata_expand 경로가 2.78에 없음

패치 전 (dnsmasq 2.90, DNSSEC 활성화):

CVE결과이유
CVE-2026-2291FAIL이스케이프된 이름을 통한 힙 오버플로우
CVE-2026-4890FAIL무한 루프 (멈춤)
CVE-2026-4891FAILRRSIG 범위 밖 읽기 크래시
CVE-2026-4892PASS/FAILDHCPv6 + 스크립트 구성에 따라 다름
CVE-2026-4893PASS논리 버그 — 크래시 없음
CVE-2026-5172FAIL위조된 rdlen을 통한 범위 밖 읽기

패치 후 (dnsmasq 2.92rel2 또는 백포트 패치 적용): 모든 6개 CVE → PASS

요구 사항

  • Python 3.6+ 및 paramiko (pip install paramiko)
  • 노트북에서 root/sudo (포트 53에 DNS 바인딩용)
  • DUT에 대한 SSH 접속 (읽기 전용 — 프로세스 상태 확인용)
  • DUT의 LAN(192.168.1.x 네트워크)에 연결된 노트북

옵션 참조

플래그기본값설명
--laptop(필수)노트북의 WAN IP (악성 DNS 서버를 바인딩)
--dut192.168.1.1DUT의 LAN IP (SSH + DNS 쿼리 전송)
--dut-userrootDUT SSH 사용자 이름
--dut-pass(프롬프트)DUT SSH 비밀번호
--dns-port53악성 DNS 서버 포트
--cve6개 모두테스트할 특정 CVE (반복 가능)

기타 도구

리모트 블랙박스 테스터 (test_dnsmasq_cve_remote.py)

경량 버전 확인 전용 — version.bind를 쿼리하여 dnsmasq 버전이 수정 버전 미만인지 확인합니다. SSH, 설정, 익스플로잇 페이로드가 필요 없습니다.

root@kitploit:~
python3 test_dnsmasq_cve_remote.py 192.168.1.1

온디바이스 스크립트 (test_dnsmasq_cve_on_device.sh)

SSH/시리얼을 통해 DUT에서 직접 실행합니다. 바이너리 버전과 컴파일 옵션을 확인합니다.

root@kitploit:~
scp test_dnsmasq_cve_on_device.sh [email protected]:/tmp/
ssh [email protected] "sh /tmp/test_dnsmasq_cve_on_device.sh"

악성 DNS 서버 (malicious_dns_server.py)

수동 테스트를 위한 독립형 익스플로잇 서버입니다. 실행하고 DUT의 업스트림 DNS를 가리킨 다음 crash-5172.evil.test, crash-2291.evil.test 등의 쿼리를 트리거합니다.

root@kitploit:~
sudo python3 malicious_dns_server.py --port 53
# 그런 다음 DUT에서: 업스트림 → 이 호스트로 구성
# 그런 다음 트리거: dig @192.168.1.1 crash-5172.evil.test

수정 후 검증

패치를 적용하고 새 펌웨어를 플래시한 후 다시 실행:

root@kitploit:~
sudo python3 dnsmasq_cve_verify.py --laptop <YOUR_WAN_IP> --dut <DUT_LAN_IP> --dut-pass <SSH_PASS>
# 예상 결과: 모든 6개 PASS

요구 사항 요약

도구PythonRootSSH네트워크
dnsmasq_cve_verify.py3.6+ paramiko필요 (포트 53)필요 (읽기 전용)DUT에 LAN + WAN
test_dnsmasq_cve_remote.py3.6+ 표준 라이브러리불필요불필요DUT로 UDP 53
test_dnsmasq_cve_on_device.shN/A (셸)불필요DUT에서 실행N/A
malicious_dns_server.py3.6+ 표준 라이브러리필요 (포트 53)불필요DUT가 우리로 전달

참고 자료

  • ISPreview: https://www.ispreview.co.uk/index.php/2026/05/string-of-dnsmasq-vulnerabilities-threatens-uk-broadband-routers.html
  • Help Net Security: https://www.helpnetsecurity.com/2026/05/12/dnsmasq-vulnerabilities-cve/
  • 업스트림 패치: https://thekelleys.org.uk/dnsmasq/CVE/
  • dnsmasq 변경 로그: https://thekelleys.org.uk/dnsmasq/CHANGELOG
도구 다운로드