CVE-2026-32833: Verified Reproduction
CVE-2026-32833: Cudy LT300 3.0 OS command injection
CVE-2026-32833 is verified against Cudy LT300 V3 firmware · firmware. Affected versions: All firmware versions prior to 2.5.12 (confirmed vulnerable: 2.4.1, 2.4.5). Fixed in 2.5.12 (released 20-May-2026). Vulnerability class: Command Injection. This high reproduction includes runnable sandbox proof, artifacts, and a plain-text agent view under REPRO-2026-00258.
What Is CVE-2026-32833?
CVE-2026-32833 is a high-severity OS command injection vulnerability in the Cudy LT300 3.0 router's LuCI web administration interface. Pruva reproduced it (reproduction REPRO-2026-00258).
CVE-2026-32833 Severity & CVSS Score
CVE-2026-32833 is rated high severity, with a CVSS base score of 8.8 out of 10.
High — serious impact or readily exploitable. Prioritize remediation.
Affected Cudy LT300 V3 firmware Versions
Cudy LT300 V3 firmware · firmware versions All firmware versions prior to 2.5.12 (confirmed vulnerable: 2.4.1, 2.4.5) are affected.
How to Reproduce CVE-2026-32833
pruva-verify REPRO-2026-00258 curl -O https://www.pruva.dev/api/v1/reproductions/REPRO-2026-00258/artifacts/bundle/repro/reproduction_steps.sh && chmod +x reproduction_steps.sh && ./reproduction_steps.sh Proof of Reproduction for CVE-2026-32833
- reached the target end-to-end
- full exploit chain demonstrated
- on the real production code path
- high confidence
- the upstream fix blocks the same trigger
HTTP form field cbid.system.ntp.current submitted to /cgi-bin/luci/admin/system/systime
- uhttpd
- /www/cgi-bin/luci
- luci.dispatcher/CBI
- model/cbi/system/systime.lua
- date -s '%s' fork_exec
How the agent worked
Root Cause and Exploit Chain for CVE-2026-32833
- Affected versions: firmware before 2.5.12; reproduced against
LT300V3-R100-2.4.5-20250519-131314. - Fixed/control version:
LT300V3-R100-2.5.12-20260518-234632. - Risk level and consequences: high. An attacker with access to the administrative interface/session can execute shell commands in the router firmware context by submitting crafted time-setting form data. On a physical router this can lead to device compromise, persistence, traffic interception, or pivoting from the router.
Impact Parity
- Disclosed/claimed maximum impact: code execution / OS command injection via a router administrative interface API endpoint.
- Reproduced impact from this run: code execution. The reproduction created attacker-chosen proof files with controlled contents by sending HTTP POST requests to the original firmware
/cgi-bin/luci/admin/system/systimeendpoint through the firmwareuhttpdserver and original/www/cgi-bin/luciLuCI dispatcher/CBI path. - Parity:
full. - Not demonstrated: no post-exploitation persistence or interactive shell was attempted; the proof stops after deterministic command execution side effects.
Root Cause
The root cause is unsafe construction of a shell command from HTTP form input in the LuCI system time handler. In the vulnerable 2.4.5 firmware, the system time page includes bytecode string markers showing the affected flow: timeclock, date -s '%s', and fork_exec. When the CBI form is submitted with the manual time-setting option, the user-supplied cbid.system.ntp.current/time value is used in a date -s '<user value>' command. Because the value is surrounded by single quotes but not sanitized before shell execution, an attacker can close the quote and append a shell command, e.g. 2025-01-01 12:00:00'; echo MARKER > /tmp/proof; #.
The fixed 2.5.12 firmware preserves the same endpoint and command structure but adds a gsub sanitization marker in the same systime.lua handler before fork_exec. The fixed negative-control runs reached the same product endpoint and form handler but did not create the attacker-controlled proof files.
No public fix commit was provided in the ticket. The reproduction compares vendor firmware images directly: vulnerable LT300V3-R100-2.4.5-20250519-131314 versus fixed LT300V3-R100-2.5.12-20260518-234632.
Reproduction Steps
- Use
bundle/repro/reproduction_steps.sh. - The script:
- Downloads or reuses the vendor LT300 V3 2.4.5 and 2.5.12 firmware zip files.
- Extracts their SquashFS root filesystems.
- Runs the firmware
usr/sbin/uhttpdunderqemu-mipselandproot. - Uses the original firmware
/www/cgi-bin/luci,luci.dispatcher,luci.cbi, andusr/lib/lua/luci/model/cbi/system/systime.luapath for the endpoint. - Adds only emulation shims for router-only services/hardware state (
ubussession,bdinfo, and route-forbidden state) so the firmware web interface can run outside physical hardware; it does not replace the vulnerable endpoint handler. - Sends two vulnerable HTTP POST attempts to
/cgi-bin/luci/admin/system/systimewith payloads incbid.system.ntp.current. - Sends two equivalent fixed-version negative-control attempts through the same endpoint.
- Expected evidence:
- Vulnerable attempts create proof files containing
VULN_ATTEMPT_1_COMMAND_EXECUTEDandVULN_ATTEMPT_2_COMMAND_EXECUTED. - Fixed attempts do not create proof files.
- GET requests for both versions render the original
System TimeCBI form and includecbid.system.ntp.current, proving endpoint reachability.
- Vulnerable attempts create proof files containing
Evidence
Primary runtime evidence:
bundle/logs/reproduction_steps.logrecords successful runs.bundle/repro/runtime_manifest.jsonrecords the runtime endpoint path,service_started=true,healthcheck_passed=true, andtarget_path_reached=true.bundle/logs/artifacts/product/proof_summary.txtcontains:vuln attempt 1 proof: VULN_ATTEMPT_1_COMMAND_EXECUTEDvuln attempt 2 proof: VULN_ATTEMPT_2_COMMAND_EXECUTEDfixed attempt 1 no proof file (negative control passed)fixed attempt 2 no proof file (negative control passed)
bundle/logs/artifacts/http/vuln_attempt1_request.txtandbundle/logs/artifacts/http/vuln_attempt2_request.txtcontain the malicious POST fields sent to/cgi-bin/luci/admin/system/systime.bundle/logs/artifacts/http/vuln_attempt1_response_headers.txtshowsHTTP/1.1 200 OKandX-CBI-State: 1for a submitted form.bundle/logs/artifacts/http/fixed_attempt1_response_headers.txtshows the fixed endpoint was reached but did not accept the injected payload as a successful proof-producing command.bundle/logs/code_comparison.txtandbundle/logs/artifacts/product/code_identity.txtcapture firmware code identity and string-level handler differences. The vulnerable handler showstimeclock,date -s '%s', andfork_exec; the fixed handler additionally showsgsub.
Environment details:
- Firmware rootfs execution used
qemu-mipselandprootin user-mode emulation. - The production-facing server was the firmware
uhttpdbinary serving the original firmware web root. - The entrypoint was the HTTP endpoint
/cgi-bin/luci/admin/system/systime.
Recommendations / Next Steps
- Upgrade Cudy LT300 3.0 devices to firmware 2.5.12 or newer.
- Do not build shell commands by concatenating or formatting raw HTTP form values. Use argument-vector APIs where possible, or strictly validate time values against a narrow date/time grammar before invoking any command.
- If shell invocation is unavoidable, reject metacharacters such as quotes, semicolons, backticks, pipes, ampersands, redirection operators,
$(), and newlines, and add regression tests for command-injection payloads. - Add endpoint-level tests for
/cgi-bin/luci/admin/system/systimeverifying that invalid time values fail closed and cannot create shell side effects.
Additional Notes
- Idempotency confirmation:
bundle/repro/reproduction_steps.shwas run successfully multiple times consecutively after fixing non-root SquashFS extraction handling. Each run recreated fresh proof artifacts and revalidated both vulnerable and fixed firmware behavior. - The run uses emulation shims for hardware/session dependencies that are normally present on a physical router. The vulnerability proof itself is not a reimplemented handler: the HTTP request traverses firmware
uhttpd, original/www/cgi-bin/luci, LuCI dispatcher/CBI, and the original firmwaresystime.luabytecode handler. - The fixed-version negative control uses the actual fixed firmware handler rather than a hand-written surrogate.
CVE-2026-32833 Reproduction Transcript
The agent's step-by-step process — every tool call, every handoff, the moment the exploit fired.
Full session Replay every step — scrub the timeline or play it back.
Artifacts and Evidence for CVE-2026-32833
Scripts, logs, diffs, and output captured during the reproduction.
How to Fix CVE-2026-32833
Upgrade Cudy LT300 V3 firmware · firmware to 2.5.12 (released 20-May-2026) or later.
FAQ: CVE-2026-32833
How does the CVE-2026-32833 command injection work?
cbid.system.ntp.current parameter, breaking out of the date -s '...' shell invocation and executing arbitrary commands in the router firmware context.Which Cudy LT300 firmware versions are affected by CVE-2026-32833, and where is it fixed?
How severe is CVE-2026-32833?
How can I reproduce CVE-2026-32833?
References for CVE-2026-32833
Authoritative sources for CVE-2026-32833 — official vulnerability databases and the upstream advisory. Pruva's reproduction verifies the issue firsthand; these are the primary records to corroborate it.