## https://sploitus.com/exploit?id=81567858-4504-5A93-AA90-65705450FF1B
# Patch and Variant Analysis of CVE-2026-2329 in Grandstream GXP1600 Firmware
Defensive static-analysis project comparing Grandstream GXP1600 firmware **1.0.7.79** (vulnerable) and **1.0.7.81** (patched) to understand how the vendor remediated the request-parsing flaw associated with **CVE-2026-2329**.
## Why this project matters
This repository demonstrates a reproducible vulnerability-research workflow: preserving evidence, extracting embedded firmware, locating a target service, tracing an exposed API path, comparing vulnerable and patched implementations, and documenting the security impact without developing or weaponizing an exploit.
## Skills demonstrated
- Firmware reverse engineering
- Vulnerability and patch analysis
- Ghidra static analysis
- ARM Linux ELF analysis
- SquashFS extraction
- Strings and cross-reference tracing
- Binary evidence hashing
- CVE research and technical reporting
- Python and Bash scripting
- Linux/Kali Linux workflows
## Executive summary
The analysis focused on the `gs_web` web-service binary and the `/cgi-bin/api.values.get` request path.
In firmware **1.0.7.79**, static analysis identified a request-token parsing routine that uses a fixed local stack buffer (`char acStack_68[68]`) and copies request-controlled token data without an apparent upper-bound check before the write.
In firmware **1.0.7.81**, the corresponding logic handles the request differently: it validates the request pointer, computes the request length, allocates a heap buffer sized to `strlen(request) + 1`, copies the request, and tokenizes the heap copy in place. This removes the fixed-size stack-buffer copy from the observed parsing path and is consistent with a remediation of the unsafe request handling.
## Repository layout
```text
grandstream-cve-2026-2329-analysis/
βββ README.md
βββ LICENSE
βββ .gitignore
βββ docs/
β βββ methodology.md
β βββ findings.md
β βββ limitations.md
βββ scripts/
β βββ firmware_header_parser.py
β βββ extraction_reference.sh
βββ hashes/
β βββ analyzed-files.sha256
βββ screenshots/
βββ README.md
```
## Evidence preserved
The analyzed `gs_web` samples were tracked by SHA-256:
| Firmware | Role | SHA-256 |
|---|---|---|
| 1.0.7.79 | Vulnerable | `29dd365affbc9aaa3a1f8833edda8a41a03813692004f890830fc5bbdf324dab` |
| 1.0.7.81 | Patched | `0cac4c54426db16d9f738a0c0b4715c600754f0f17430a6330ab8421310a8942` |
The vendor firmware images and extracted binaries are **not included** in this repository.
## High-level workflow
1. Obtain firmware from the vendor source.
2. Verify archive integrity and record hashes.
3. Inspect the firmware container and partition metadata.
4. Decode/extract relevant partitions.
5. Identify and unpack the SquashFS filesystem.
6. Locate the `gs_web` binary.
7. Preserve the exact analyzed binaries with SHA-256 hashes.
8. Import both versions into Ghidra.
9. Use the `api.values.get` string and cross-references to locate related request-handling logic.
10. Compare the vulnerable and patched handlers and document the remediation pattern.
See [`docs/methodology.md`](docs/methodology.md) for additional detail.
## Responsible-use statement
This repository is intended for authorized defensive security research, vulnerability analysis, education, and reproducible technical documentation. It does **not** contain exploit code, weaponized payloads, vendor firmware, credentials, or instructions for unauthorized access.
## Limitations
The project is a **static patch-comparison analysis**. Dynamic exploitation, live-device testing, and exploitability validation were outside the completed scope. See [`docs/limitations.md`](docs/limitations.md).
## Author
**Vivian Onyinye Uba**
Cybersecurity | Threat Detection | Vulnerability Research | OT/ICS Security