CoolGithubProjects
Open in Telegram
Part of @r_channels contains posts from r/CoolGithubProjects and r/CoolCSTechTalks
Show more4 695
Subscribers
+1024 hours
+567 days
+19730 days
Posts Archive
4 695
XXERipper: an open-source XXE scanner with differential parser fingerprinting, mandatory-signal gating, and chain-based impact analysis
I am releasing XXERipper v1.0.0, an open-source XML External Entity scanner I have been working on for the past five months.
# What it does
XXERipper is a black-box scanner for XXE. It runs in-band, error-based, and blind out-of-band techniques, fingerprints the target's XML parser, and reports findings with CWE mappings, a confidence score, and where applicable the recovered file content and extracted credentials.
The design is driven by a single problem: most XXE scanners treat "the parser accepted my DOCTYPE" as equivalent to "the external entity resolved." Those two outcomes produce similar response deltas and are difficult to distinguish without additional evidence. XXERipper requires a mandatory signal before confirming any finding.
# Detection model
Every candidate response is scored against a seven-sample statistical baseline (median length, IQR, p95, mode status, most-common body hash, median Shannon entropy, windowed entropy over 256-byte windows). Signals carry the following weights:
+50 correlated OOB callback (token match)
+40 file-content fingerprint (+5 per additional indicator)
+25 chain integrity (entity resolved end-to-end)
+20 parser error delta
+20 timing anomaly
+10 length delta >= 20%
+5 status code shift
Vetoes:
-100 reflection (payload echoed verbatim)
-75 normalized baseline match
-50 byte-identical baseline body
-30 soft reflection (reflection present but a strong signal too)
Classification requires a mandatory signal — one of file\_type, oob\_correlated, or chain\_integrity. Parser errors and timing anomalies contribute to score but cannot confirm a finding independently. A response scoring >=70 with only one independent evidence family is capped at HIGH rather than CRITICAL.
# Parser fingerprinting
Nine paired test/control probes identify the underlying XML stack across eleven signature families (libxml2, Xerces, .NET, Java SAX, Java StAX, python-etree, PHP DOM, Ruby, Node, Perl, Go). A capability is marked present only when the test probe succeeds and the control does not, which makes the result differential rather than pattern-matched. Results are cached per-URL, so repeat scans skip the probe phase.
The fingerprint gates two phases (in-band file read, error-based local-DTD sweep) so a target that does not resolve entities is not sent the full payload catalogue.
# Attack coverage
Many technique families are used, as an example:
* In-band file read, PHP filter chain, PHP expect:// RCE
* Error-based: local DTD reuse, malformed entity
* Blind: DNS OOB, external DTD, parameter-entity OOB, CDATA bypass, timing-based
* Encoding bypass: UTF-16, UTF-7, UCS-4, alternate DOCTYPE
* Alternative sinks: XInclude (parse=text and parse=xml), SVG upload, SAML envelope, SOAP envelope
* Extended fetchers: XSLT document(), XSLT xsl:include, XSD schemaLocation, XSD import, xml-stylesheet PI
* Cloud metadata: AWS IMDSv1 and IMDSv2 (detected separately), GCP, Azure, Alibaba, OCI, Kubernetes — 12 endpoints across 6 providers
* RCE wrappers: Java jar:, PHP data://, phar://, glob://, compress.zlib://
* Office document: DOCX and XLSX xml-stylesheet PI, fetched by server-side XSLT processors
* YAML deserialization: PyYAML and SnakeYAML type tags
* SAML pre-signature: assertion parsed before signature verification
* JSON-to-XML: content-type switching on JSON-only endpoints
Beyond the standard POST with application/xml shape, the scanner probes a Content-Type matrix, HTTP method variation (PUT/PATCH), query-parameter injection, form-encoded bodies, and multipart uploads.
# Out-of-band confirmation and blind exfiltration
OOB uses interactsh-client in manual mode (scanner prints subdomains, operator watches the client) or auto mode (scanner spawns interactsh-client and correlates callbacks in-process by 16-hex token).
For blind exfiltration, the scanner serves the DTD through one of three mechanisms: a
4 695
XXERipper: an open-source XXE scanner with differential parser fingerprinting, mandatory-signal gating, and chain-based impact analysis
I am releasing XXERipper v1.0.0, an open-source XML External Entity scanner I have been working on for the past five months.
# What it does
XXERipper is a black-box scanner for XXE. It runs in-band, error-based, and blind out-of-band techniques, fingerprints the target's XML parser, and reports findings with CWE mappings, a confidence score, and where applicable the recovered file content and extracted credentials.
The design is driven by a single problem: most XXE scanners treat "the parser accepted my DOCTYPE" as equivalent to "the external entity resolved." Those two outcomes produce similar response deltas and are difficult to distinguish without additional evidence. XXERipper requires a mandatory signal before confirming any finding.
# Detection model
Every candidate response is scored against a seven-sample statistical baseline (median length, IQR, p95, mode status, most-common body hash, median Shannon entropy, windowed entropy over 256-byte windows). Signals carry the following weights:
+50 correlated OOB callback (token match)
+40 file-content fingerprint (+5 per additional indicator)
+25 chain integrity (entity resolved end-to-end)
+20 parser error delta
+20 timing anomaly
+10 length delta >= 20%
+5 status code shift
Vetoes:
-100 reflection (payload echoed verbatim)
-75 normalized baseline match
-50 byte-identical baseline body
-30 soft reflection (reflection present but a strong signal too)
Classification requires a mandatory signal — one of file_type, oob_correlated, or chain_integrity. Parser errors and timing anomalies contribute to score but cannot confirm a finding independently. A response scoring >=70 with only one independent evidence family is capped at HIGH rather than CRITICAL.
# Parser fingerprinting
Nine paired test/control probes identify the underlying XML stack across eleven signature families (libxml2, Xerces, .NET, Java SAX, Java StAX, python-etree, PHP DOM, Ruby, Node, Perl, Go). A capability is marked present only when the test probe succeeds and the control does not, which makes the result differential rather than pattern-matched. Results are cached per-URL, so repeat scans skip the probe phase.
The fingerprint gates two phases (in-band file read, error-based local-DTD sweep) so a target that does not resolve entities is not sent the full payload catalogue.
# Attack coverage
Many technique families are used, as an example:
In-band file read, PHP filter chain, PHP expect:// RCE
Error-based: local DTD reuse, malformed entity
Blind: DNS OOB, external DTD, parameter-entity OOB, CDATA bypass, timing-based
Encoding bypass: UTF-16, UTF-7, UCS-4, alternate DOCTYPE
Alternative sinks: XInclude (parse=text and parse=xml), SVG upload, SAML envelope, SOAP envelope
Extended fetchers: XSLT document(), XSLT xsl:include, XSD schemaLocation, XSD import, xml-stylesheet PI
Cloud metadata: AWS IMDSv1 and IMDSv2 (detected separately), GCP, Azure, Alibaba, OCI, Kubernetes — 12 endpoints across 6 providers
RCE wrappers: Java jar:, PHP data://, phar://, glob://, compress.zlib://
Office document: DOCX and XLSX xml-stylesheet PI, fetched by server-side XSLT processors
YAML deserialization: PyYAML and SnakeYAML type tags
SAML pre-signature: assertion parsed before signature verification
JSON-to-XML: content-type switching on JSON-only endpoints
Beyond the standard POST with application/xml shape, the scanner probes a Content-Type matrix, HTTP method variation (PUT/PATCH), query-parameter injection, form-encoded bodies, and multipart uploads.
# Out-of-band confirmation and blind exfiltration
OOB uses interactsh-client in manual mode (scanner prints subdomains, operator watches the client) or auto mode (scanner spawns interactsh-client and correlates callbacks in-process by 16-hex token).
For blind exfiltration, the scanner serves the DTD through one of three mechanisms: a
4 695
jevii - open-source Mac AI agent with human-like mouse and keyboard control
https://github.com/shalevamin/jevii
https://redd.it/1wpvnm9
@r_CoolGithubProjects
4 695
I made Jev moderate Discord servers
https://soter.frolleks.site
https://redd.it/1wpsgty
@r_CoolGithubProjects
4 695
Generate Request {to: API from: Browser}
https://grab.js.org
https://redd.it/1wpsm0p
@r_CoolGithubProjects
4 695
Generate Request to API from Browser (or Backend)📍 axios/curl killer for React
https://grab.js.org
https://redd.it/1wpqzfw
@r_CoolGithubProjects
4 695
skill-exchange - an open registry where AI agents publish, discover, and install portable skills
https://github.com/sentientbias/skill-exchange
https://redd.it/1wpq3wm
@r_CoolGithubProjects
4 695
Open source: black-box session recorder for any CLI agent (works with DeepSeek via OpenCode / Codex / Claude Code / custom)
https://github.com/arunsoman/agentbox
https://redd.it/1wpnv7f
@r_CoolGithubProjects
4 695
IStanPdf - A Foss Offline app for PDF & DOCX Operations
https://redd.it/1wplzz6
@r_CoolGithubProjects
4 695
I got tired of Zoom screen shares where only one person codes, so I built an open-source real-time collaborative workspace.
https://github.com/vinyassystems/vincio
https://redd.it/1wpl401
@r_CoolGithubProjects
4 695
Coding agents made my line count explode, so I built a board to compare it with friends (open source, counts private repos locally)
https://redd.it/1wpff74
@r_CoolGithubProjects
4 695
ShellCanvas — an open-source desktop workspace for SSH servers (Rust/Tauri)
https://github.com/techartdev/ShellCanvas
https://redd.it/1wpaxtu
@r_CoolGithubProjects
4 695
Agent HUD Open: a macOS HUD for coding-agent sessions and local usage history
https://redd.it/1wp8d5z
@r_CoolGithubProjects
4 695
I built Deviload, a free yt-dlp desktop app with a timeline video editor and phone transfer (Rust + Tauri)
https://redd.it/1wpb9wa
@r_CoolGithubProjects
