
방어적 취약점 연구 프로젝트로, CVE-2026-2329에 대해 취약한 Grandstream GXP1600 펌웨어와 패치된 펌웨어를 비교하며, SquashFS 추출, Ghidra 리버스 엔지니어링, ARM ELF 추적을 사용하여 공급업체의 수정 사항을 무기화된 ex 없이 문서화합니다.
Grandstream GXP1600 펌웨어 1.0.7.79(취약 버전)과 1.0.7.81(패치 버전)을 비교하여 공급업체가 CVE-2026-2329와 관련된 요청 파싱 결함을 어떻게 수정했는지 파악하는 방어적 정적 분석 프로젝트입니다.
이 저장소는 증거 보존, 임베디드 펌웨어 추출, 대상 서비스 위치 파악, 노출된 API 경로 추적, 취약/패치 구현 비교, 그리고 익스플로잇을 개발하거나 무기화하지 않고 보안 영향을 문서화하는 재현 가능한 취약점 연구 워크플로우를 보여줍니다.
분석은 gs_web 웹 서비스 바이너리와 /cgi-bin/api.values.get 요청 경로에 초점을 맞췄습니다.
펌웨어 1.0.7.79에서 정적 분석 결과, 고정 로컬 스택 버퍼(char acStack_68[68])를 사용하고 쓰기 전에 명시적인 상한 검사 없이 요청에 의해 제어되는 토큰 데이터를 복사하는 요청 토큰 파싱 루틴이 확인되었습니다.
펌웨어 1.0.7.81에서 해당 로직은 요청을 다르게 처리합니다. 요청 포인터를 검증하고, 요청 길이를 계산하며, strlen(request) + 1 크기의 힙 버퍼를 할당하고, 요청을 복사한 다음 힙 복사본을 제자리에서 토큰화합니다. 이로써 관찰된 파싱 경로에서 고정 크기 스택 버퍼 복사가 제거되며, 이는 안전하지 않은 요청 처리의 수정 조치와 일치합니다.
채용 담당자와 분석가 모두 결과를 빠르게 파악할 수 있는 보기는 시각적 패치 비교 문서를 참조하십시오. 이 문서에는 다음 세 가지 정리된 재구성 다이어그램이 포함되어 있습니다:
해당 그림은 Ghidra 인터페이스의 스크린샷이 아니라 기록된 Ghidra 분석 노트를 바탕으로 한 재구성임을 명시적으로 표시해 두었습니다.
grandstream-cve-2026-2329-analysis/
├── README.md
├── LICENSE
├── .gitignore
├── docs/
│ ├── methodology.md
│ ├── findings.md
│ ├── visual-analysis.md
│ └── limitations.md
├── scripts/
│ ├── firmware_header_parser.py
│ └── extraction_reference.sh
├── hashes/
│ └── analyzed-files.sha256
└── screenshots/
└── README.md
분석된 gs_web 샘플은 SHA-256으로 추적되었습니다:
| 펌웨어 | 역할 | SHA-256 |
|---|---|---|
| 1.0.7.79 | 취약 | 29dd365affbc9aaa3a1f8833edda8a41a03813692004f890830fc5bbdf324dab |
| 1.0.7.81 | 패치됨 | 0cac4c54426db16d9f738a0c0b4715c600754f0f17430a6330ab8421310a8942 |
공급업체 펌웨어 이미지와 추출된 바이너리는 이 저장소에 포함되어 있지 않습니다.
gs_web 바이너리를 찾습니다.api.values.get 문자열과 크로스 레퍼런스를 사용하여 관련 요청 처리 로직을 찾습니다.자세한 내용은 docs/methodology.md를 참조하십시오.
이 저장소는 승인된 방어적 보안 연구, 취약점 분석, 교육 및 재현 가능한 기술 문서화를 위해 제공됩니다. 익스플로잇 코드, 무기화된 페이로드, 공급업체 펌웨어, 자격 증명 또는 무단 접근 지침은 포함되어 있지 않습니다.
이 프로젝트는 정적 패치 비교 분석입니다. 동적 익스플로잇, 실기기 테스트 및 악용 가능성 검증은 완료된 범위에 포함되지 않았습니다. docs/limitations.md를 참조하십시오.
Vivian Onyinye Uba
사이버 보안 | 위협 탐지 | 취약점 연구 | OT/ICS 보안