Server-side request forgery in PinePods via podcast enclosure URLs
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Impact type
- —
- Confidentiality · integrity · availability
- High · Low · Low
- Fix status
- Fixed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA.
Summary
PinePods before 0.9.0 does not validate the destination of podcast episode URLs. An authenticated user who subscribes to a crafted RSS feed can make the server send requests to arbitrary hosts, which is a server-side request forgery (CWE-918). Because the server saves the responses of downloaded episodes, a low-privilege user can read responses from loopback, private-network and cloud metadata services, which may expose internal services and credentials.
Written with Claude Haiku 5.5 from the sources below · 2026-11-05
Description from the CNA
PinePods is a complete, self-hosted podcast management system written in Rust. Prior to 0.9.0, an authenticated user can subscribe to an attacker-controlled RSS feed through `POST /api/data/add_podcast` in `rust-api/src/handlers/podcasts.rs`. `get_podcast_values` and `add_episodes` in `rust-api/src/database.rs` parse the feed with `feed-rs` and store the `<enclosure url>` verbatim in `Episodes.episodeurl` without destination host/IP validation. `POST /api/data/download_podcast` invokes `spawn_download_podcast_episode` and `download_episode_and_wait()` in `rust-api/src/services/tasks.rs`, which sends a `reqwest` GET to the stored URL and saves and records the response in `DownloadedEpisodes` for later retrieval. The `estimate_duration_from_audio_url_async()` path in `rust-api/src/database.rs` also sends an unvalidated HEAD during feed add/refresh. Default redirect following permits an initially external enclosure URL to redirect to an internal target. A low-privilege user can make server-side GET/HEAD requests to reachable loopback, private-network and cloud metadata services and read downloaded internal responses, enabling internal-service enumeration, confidential-data disclosure and possible metadata credential theft. Episode downloading requires server downloads to be enabled, which is the default; self-service signup is supported. This issue is fixed in version 0.9.0.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| madeofpendletonwool | PinePods | before 0.9.0 | 0.9.0 | Patch available | CNA |
- PinePods Vendormadeofpendletonwool Affected before 0.9.0 Fixed in 0.9.0 Patch available CNA
Remediation
Update PinePods to version 0.9.0, which fixes this issue.
Written with Claude Haiku 5.5 from the sources below · 2026-11-05
- Fix · CNA PinePods (madeofpendletonwool) Fixed in 0.9.0
Timeline
- 2026-10-30 Threatist record created from CVE-2026-55598
- 2026-10-30 CISA SSVC decision points changed
- 2026-10-30 Priority changed: MEDIUM → HIGH
References
Sources
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences