Skip to page content
SAVRN
Search Plan a project

Dataset · Text classification

polyglot-bug-patterns

by Kicaulah Kicaulah/polyglot-bug-patterns

Bro, imagine a dataset of 43 non-destructive attack payloads across 8 bug classes — 24 of them polyglot, meaning a single string that's simultaneously plausible HTML, JS, SQL and shell, so it escapes whatever context your app dropped it into.

Rows96
Configurations4
Size106.1 KB
Licensemit
AccessPublicly accessible
Monthly Downloads—

Dataset Card

By Kicaulah, published under mit, revision bbc66c731a24.

Dataset · Space · Model · GitHub


Bro, imagine a dataset of 43 non-destructive attack payloads across 8 bug classes — 24 of them polyglot, meaning a single string that's simultaneously plausible HTML, JS, SQL and shell, so it escapes whatever context your app dropped it into. Plus real detector output from a full multimodal scan.

Everything here is synthesised or locally generated. No real-world traffic, no scraped data, no user data.

What's inside

Config Rows What it is
payloads 43 Every detection payload: value, bug class, CWE, OWASP, CVSS v3.1 vector+score, polyglot flag, and a destructive safety flag.
findings 36 Real findings from one full scan of the bundled demo target, with proof strings, endpoints, remediation, tags.
scans 1 Scan-level rollup: pages scanned, risk score, counts by severity, modality breakdown.
class_index 9 Per-class counts plus totals.

Each config ships JSONL and Parquet, so both of these work:

from datasets import load_dataset

ds = load_dataset("Kicaulah/polyglot-bug-patterns", "payloads")
print(ds["train"][0]["value"])
print(ds["train"].filter(lambda r: r["polyglot"])[0]["value"])

findings = load_dataset("Kicaulah/polyglot-bug-patterns", "findings")
print(len(findings["train"]), "findings from one scan")

The payload classes

Class n Examples
sqli 8 ' OR 1=1 --, UNION SELECT NULL, MySQL error-based double-query, ORDER BY 99 column-count probe
xss 9 '"><svg/onload=alert(1)> attr breakout, </script><script> closer, JS-string escape, {{7*7}} SSTI
cmdi 6 ;MARKER;, $(echo …), backticks, %0a CRLF, ${IFS}
traversal 5 ..%2f..%2f..%2fetc%2fpasswd, ....//....//, double-double-encoded
ssrf 5 http://MARKER.oast.invalid/, 127.0.0.1, file:///, gopher://, [::1]
prompt-injection 4 "Ignore all previous instructions", </s>[INST] … [/INST] chat-template escape, markdown-fence system override
nosql-ldap 3 *(), '; return true; //, LDAP wildcard filter
redirect 3 absolute, protocol-relative, backslash open redirect

Every payload carries a unique marker (PBHX7) so reflection is unambiguous — that's what makes these usable as training signal for a detector or as a fixture in your own test suite.

Safety properties

This is a defensive dataset. Concretely:

  • Every payload is non-destructive by construction. The destructive column is false for all 43 rows — verified by the same safety.is_forbidden_payload() gate the scanner itself uses at runtime.
  • No DROP/DELETE/UPDATE/INSERT, no system()/exec()/xp_cmdshell, no sleep()/benchmark(), no reverse shells, no persistence.
  • Time-based blind SQLi is deliberately absent — sleep() payloads are blocked project-wide.
  • Payloads are for systems you own or are authorized to test. Using them against someone else's production box is illegal in most jurisdictions.

Using it

As a test fixture — assert your WAF/filter catches the polyglot set:

from datasets import load_dataset
ds = load_dataset("Kicaulah/polyglot-bug-patterns", "payloads")["train"]
for row in ds.filter(lambda r: r["vuln_class"] == "xss"):
    print(row["value"])   # feed each through your own escaping function

As detector training data — findings pairs a payload with the signal that proved it (proof), the CVSS vector, and the remediation. That's a supervised signal for "was this injection real or a reflection".

As an LLM security eval — prompt-injection rows are ready-made instruction overrides for testing whether your model or agent guardrails hold.

Provenance

  • payloads — hand-authored from public documentation (OWASP WSTG, PortSwigger cheat sheets, public CVE writeups), rewritten to be non-destructive and marker-tagged.
  • findings / scans — actual output of Hunter.demo() against polyglot_bug_hunter.demo_target, an intentionally vulnerable app that runs on localhost inside the test process. Regenerate with python tools/build_dataset.py.

Nothing was scraped from production systems.

Changelog

  • v1.0.0 — initial release: 43 payloads / 8 classes (24 polyglot), 36 findings from one full 4-modality demo scan, JSONL + Parquet, 12 languages declared.

Contribute a pattern

Missing a class? Open an issue or PR. The bar: it must be non-destructive (the automated gate enforces it), documented with a CWE and an OWASP mapping, and tagged for what detector signal it should produce.

MIT · PolyglotBugHunter-X · authorized security testing only

Structure

class_index 9 rows

SplitRowsSize
train9596 B
record_typestringvuln_classstringcountint64totalint64polyglotint64classesint64languagesint64

findings 43 rows

SplitRowsSize
train4328.4 KB
idstringrecord_typestringtitlestringseveritystringcvss_vectorstringcvss_scorefloat64modalitystringconfidencestringcwestringowaspstringendpointstringparameterstringpayloadstringproofstringdescriptionstringremediationstringtagslistsourcestring

payloads 43 rows

SplitRowsSize
train439.7 KB
idstringrecord_typestringvuln_classstringbucketstringlabelstringvaluestringpolyglotboolcwestringowaspstringnotestringconfidencestringcvss_vectorstringcvss_scorefloat64severitystringdestructiveboolmarkerstring

scans 1 rows

SplitRowsSize
train1235 B
record_typestringtargetstringmodeslistpages_scannedint64findingsint64risk_scorefloat64worst_severitystringcountsvalueby_modalityvaluetechlistduration_secfloat64detector_versionstring

Details

Repository
Kicaulah/polyglot-bug-patterns
Publisher
Kicaulah
Task category
Text classification
Tags
web-security, bug-bounty, security
Size category
n<1K
Languages
en, zh, ja, ko, id, es, ar, ru
Revision
bbc66c731a24613dbdc13660ca1e377f8c6095c3
Last updated
2026-10-02

Files

11 files, 106.1 KB in total.

Data8 files · 81.1 KB
Documentation1 file · 6.1 KB
Other1 file · 16.4 KB
Repository1 file · 2.5 KB
Every file
FileTypeSizeSHA-256
data/class_index.jsonlData632 B—
data/class_index.parquetData1.5 KBc165d3127adb
data/findings.jsonlData37.1 KB—
data/findings.parquetData14.4 KBe0d3f8189ce5
data/payloads.jsonlData17.9 KB—
data/payloads.parquetData6.1 KBb4edbef0d18a
data/scans.jsonlData429 B—
data/scans.parquetData3.0 KBed28484206ba
README.mdDocumentation6.1 KB—
data/hf_demo.ipynbOther16.4 KB—
.gitattributesRepository2.5 KB—

License and Download

License
mit
Access
No access gate
Download from Kicaulah

Released by Kicaulah through its official repository on Hugging Face. Read the license.

Models Trained on This Dataset