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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/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)

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

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가 우리에게 쿼리를 전달하지 않음"

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

dnsmasq 2.78 플랫폼 (전체: PASS)

dnsmasq 2.90 플랫폼 (전체: PASS)

결론

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

예상 결과

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

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

패치 후 (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 네트워크)에 연결된 노트북

옵션 참조


기타 도구

리모트 블랙박스 테스터 (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

요구 사항 요약

참고 자료

  • 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
도구 다운로드
2단계가 올바르게 수행되었는지 확인. GUI에 입력한 노트북 WAN IP를 확인하세요.
"DUT에 연결할 수 없음"SSH 자격 증명 확인. 수동으로 시도: ssh [email protected]
"포트 53을 바인딩할 수 없음"sudo로 실행. 또는 --dns-port 5353 사용 (수동 DUT 설정 필요).
"버전: 알 수 없음"DUT에 dnsmasq가 표준 경로에 없을 수 있음. 도구는 여전히 올바르게 테스트합니다.
CVE결과이유
CVE-2026-2291PASSDNSSEC 미컴파일
CVE-2026-4890PASSDNSSEC 미컴파일
CVE-2026-4891PASSDNSSEC 미컴파일
CVE-2026-4892PASSdnsmasq가 DHCPv6 제공 안 함 (별도 DHCPv6 서버 사용)
CVE-2026-4893PASS논리 버그만 — 크래시 없음
CVE-2026-5172PASS익스플로잇에서 생존 (취약 코드 경로가 2.78에 없음)
CVE결과이유
CVE-2026-2291PASSDNSSEC 미컴파일
CVE-2026-4890PASSDNSSEC 미컴파일
CVE-2026-4891PASSDNSSEC 미컴파일
CVE-2026-4892PASSDHCPv6 미컴파일
CVE-2026-4893PASS논리 버그만 — 크래시 없음
CVE-2026-5172PASS익스플로잇 변종에서 생존
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에 없음
CVE결과이유
CVE-2026-2291FAIL이스케이프된 이름을 통한 힙 오버플로우
CVE-2026-4890FAIL무한 루프 (멈춤)
CVE-2026-4891FAILRRSIG 범위 밖 읽기 크래시
CVE-2026-4892PASS/FAILDHCPv6 + 스크립트 구성에 따라 다름
CVE-2026-4893PASS논리 버그 — 크래시 없음
CVE-2026-5172FAIL위조된 rdlen을 통한 범위 밖 읽기
플래그기본값설명
--laptop(필수)노트북의 WAN IP (악성 DNS 서버를 바인딩)
--dut192.168.1.1DUT의 LAN IP (SSH + DNS 쿼리 전송)
--dut-userrootDUT SSH 사용자 이름
--dut-pass(프롬프트)DUT SSH 비밀번호
--dns-port53악성 DNS 서버 포트
--cve6개 모두테스트할 특정 CVE (반복 가능)
도구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가 우리로 전달