XSS Research Lab & Bot
An experimental Python CLI toolkit for XSS research and evidence collection. Project work combines static source/sink candidate analysis, bounded HTTP reflection checks, and browser observations in controlled labs. Reports keep those observations separate from CID-matched JavaScript execution and from vulnerability triage. The project is a research-support prototype, not a general-purpose autonomous scanner.
Project summary: The work focuses on implementing and validating a repeatable analysis workflow: inspect candidate source/sink paths, observe bounded HTTP/browser behavior, preserve evidence boundaries, and test fixes in local fixtures. The retained acceptance includes controlled corpus and loopback-fixture checks; it does not establish broad real-world detection accuracy, independent product findings, competitor superiority, or newly discovered CVEs. Install the package with:
python -m pip install dxa-research-toolkit
The accepted 0.1.0 wheel remains available through the historical
GitHub Release.
Current tag and artifact status is recorded in STATUS. Use the
tools only on systems you own or are explicitly authorized to test.
Current status
This is an experimental research toolkit, not a general-purpose vulnerability
scanner. The v0.1.0 GitHub Release remains available as a historical release;
this source checkout includes later changes. Bounded acceptance
for R0–R6, the Python AST pilot (R8), and the declared operational scope (R9)
is complete. E05's measured textarea parser-context extension is accepted
within its narrow scope. A04 is bounded complete for the selected local GET
routes. A05's selected advisory dispositions have now been rebound to current
Kadrom source eb031a1; the regenerated 248-coordinate dependency tree matches
the prior query hash, with no new applicable candidate among the reviewed leads.
A05 remains partial: one malformed multipart cleanup fixture passed, while
deployment-wide and broader runtime conditions remain open. The local authorized
Kadrom checkout exists, but no current-source app deployment or active proxy/WAF
was available for those checks. A fresh isolated runtime attempt built the
current JAR, but host-to-MySQL connectivity failed before the app bound its
health port; no health/auth requests were sent. R7's bounded local research is complete; this
does not establish vulnerability absence. See the A05 runtime attempt.
Current handoff, open work and evidence limits are in STATUS, the
roadmap, and the validation log.
The current feature-freeze decision, CVE-source roles, and evidence-based CV
wording are in the CVE and portfolio review.
On 24 October, an independent K03 replay completed 17 requests against the existing local Juice Shop 20.2.0 image in an internal-only lab; it reproduced the documented SQLi-shaped login, unsigned JWT, and synthetic cross-account basket behaviors. This is a new training-lab replay, not validation of the old sessions or a CVE finding. K04 source review found that the pinned image's current login-IP sanitizer path does not match the historical regex reassembly claim, so no faithful K04 runtime retest was run. See the separate K03 and K04 records. Three evidence-based case drafts for K01, E05, and the known BCrypt issue are in the portfolio preparation audit. The concise CV draft is separate from the supporting evidence. K04's local artifact search found no matching historical Juice Shop source/image; its retest remains blocked on that artifact. The follow-up found no faithful local K04 image for a runtime retest and no currently running current-source Kadrom deployment for broad A05 checks; see K04 testability and K04 local artifact search, and A05 environment readiness.
The A05/E05 evidence delivery is e56ae60 on main; local HEAD matched
origin/main when checked. Its
hosted CI
analyzer, required authenticated-browser and optional dxadom-browser jobs
completed successfully; K01 Linux CI
also succeeded. These are hosted job results; artifacts were not downloaded
for independent review. The latest local E05 selected acceptance passed
381 tests with zero skips and its installed CLI gate passed 9 controls;
the A05 parser fixture passed 1 test. These bounded checks are not broad
detection-accuracy or vulnerability-discovery measurements. See the respective
E05 evidence and
A05 evidence.
Selected evidence-backed cases
- Stored XSS proof → fix → retest: K01 local fixture records one CID-matched browser execution, four negative controls, HTML text encoding, and retest. It is a training fixture, not a product/CVE claim.
- Tooling failure → regression: R9 browser-fixture follow-up records serial fixture failures, the threaded-server correction, and the full local Chrome DOM suite. This measures fixture reliability, not scanner accuracy.
- Controlled research replay: R4 exact-payload replay checks stored scanner candidates in separate writer/reader-admin loopback fixtures with escaped controls. Some outcomes remain inconclusive; it is not a fresh scanner comparison or a vulnerability ranking.
Install and run the local demos.
Stored/stored-auto blind denemeleri artık yansıma olmasa da kalıcı kaydedilir; tarama sonrası callback kontrolü ve JSON/HTML kayıt raporu vardır. Kullanım ve kapsam. Callback, JS proof değildir.
HTTP modları ortak bulgu üreticisi kullanır: ham marker ve JSON yanıtı execution
sayılmaz. --json-out ve --html aynı finding'leri raporlar.
Kanıt modeli ve uyumluluk değişiklikleri.
Source checkouts also provide offline SARIF 2.1.0 export:
dxa-sarif evidence.json --output evidence.sarif. Results preserve observation
and triage categories as review records, without vulnerability severity or
execution claims. This addition is unreleased; the existing release asset is unchanged.
R1 kabul kapsamı tamamlandı: resmî kanıt sözleşmesi, statik/HTTP/DOM/journal ortak raporları, hata/atlama olayları ve rol/sink ayrımını koruyan dedup. Madde bazında kapanış. R2 HTTP kabulü tamam: oturum kontrolü, rate ve CSRF sözleşmesi. R3 loopback browser proof, observer direct eval, SPA route bütçesi ve allowlist header aktarımı kabul edildi; WebSocket/genel ağ sandboxı kapsam dışı. R3 demo ve kapsam.
İlk güncel vaka: K01 stored yorum — execution → fix → retest. Yerel fixture'da ayrı okuyucu tarayıcısıyla 5/5 kontrol geçti; aynı payload output encoding sonrası düz metin kaldı. Bu vaka kanıtıdır; genel bot execution motoru değildir.
Denetim raporu ve dosya bazında inceleme depoda bulunur.
- Güncel durum ve sınırlar
- Ana proje roadmap'i: bot, rapor/kanıt, portfolyo, staj, araştırma/CVE
- 76 dosyanın görev eşlemesi
- Test ve doğrulama kaydı
- Değişiklik kaydı
- Eski mesajın değerlendirmesi
Araçlar
| Bileşen | İşlev | Sınır |
|---|---|---|
dxa.py |
Static source/sink candidates, with a bounded Python AST pilot | Language coverage differs; this is not general sound data-flow analysis |
dxadyn.py |
HTTP reflection, stored checks, and bounded same-origin discovery | Findings are candidates/reflections; they do not alone establish XSS |
dxadom.py |
Playwright page, sink, dialog, route, and header observations | Bounded loopback adapter; observation is distinct from CID-matched execution |
dxa_callback.py |
Local callback collection and lookup | A matched callback is resource-callback, not JavaScript execution |
dxa2dyn.py |
Parameter hints from static candidates | A hint is not a complete source-to-sink proof |
Payload corpus metadata includes 50 base variants and 18 mutation definitions. The historical generator count of 950 payload strings (895 after removing CID-specific uniqueness) describes generated test inputs only; it is not a count of working exploits, successful executions, WAF bypasses, or findings. HTTP/statik çekirdek stdlib kullanır; testler pytest, tarayıcı gözlemcisi Playwright ve uygun browser gerektirir.
Yerel kurulum ve smoke kontrolü
Python 3.10 veya üstü gerekir. Depo kökünde temel CLI'ları sanal ortama kurup yardım ekranlarını kontrol et:
python -m venv .venv
Windows PowerShell:
.venv\Scripts\Activate.ps1
python -m pip install .
dxa --help
dxadyn --help
dxaprove --help
macOS/Linux:
source .venv/bin/activate
python -m pip install .
dxa --help
dxadyn --help
dxaprove --help
Temel kurulumun zorunlu çalışma zamanı bağımlılığı yoktur. Browser proof demo'su
için aynı ortamda isteğe bağlı, playwright==1.63.0 sürümüne sabitlenmiş
browser extra'yı kur ve Chromium binary'sini ayrıca yükle:
python -m pip install ".[browser]"
python -m playwright install chromium
dxaprove --demo --output demo-evidence
Demo kendi geçici loopback fixture'ını açıp kapatır. Yeni bir çıktı klasörü
kullan. execution-observed yalnız bu fixture'daki canary gözlemidir; açıklık
triage'ı veya genel tarayıcı doğruluğu değildir. İzinli başka bir loopback lab
için dxaprove --spec <yerel-json> kullanılabilir; bu proof sözleşmesi dxa
ve dxadyn tarama config'lerinden ayrıdır. Tarama komutlarını yalnız kendi
yerel fixture'larında veya açıkça yetkili hedeflerde çalıştır.
Depo metadata'sında ilk araştırma sürümü dxa-research-toolkit 0.1.0 olarak
seçilmiştir. Bu checkout sürüm ve release notlarını hazırlar; PyPI yayını veya
Git release etiketi yapıldığı anlamına gelmez. Ürün deneysel bir araştırma
yardımcısıdır; kapsam ve kanıt sınırları için aşağıdaki notları ve ilgili audit
kayıtlarını inceleyin. CLI'ları kaynak dosyalarından doğrudan çalıştırmak da
mümkündür.
dxadyn için --dom, --stored ve --flow ana modları birlikte seçilemez.
Stored/flow hedefi kendi seçeneklerinden verilir; positional URL eklenmez.
--dom HTTP oturum seçeneklerini (--login, --auth-flow, --auth-check,
--cookie, --header, --csrf-refresh, --csrf-header) kabul etmez.
Desteklenmeyen birleşimler ağ/browser işlemi ve rapor yazımı başlamadan exit 2
verir. Oturumlu browser proof için dxaprove kullanılır.
Statik dxa CLI için isteğe bağlı JSON config örneği:
{"schema_version": 1, "min_confidence": "medium"}
dxa <yerel-kaynak> --config scan.json komutunda öncelik
--min-confidence > config > varsayılan low şeklindedir. Bu dar config
sözleşmesi yalnız statik CLI için geçerlidir; dosyaya oturum bilgisi koymayın.
Dynamic dxadyn has a separate, limited HTTP tuning config:
{"schema_version": 1, "depth": 1, "parallel": 1, "rate": 0}
For an authorized local target, dxadyn <local-url> --config http.json --depth 0
uses explicit CLI values before config, then defaults (depth=0, parallel=1,
rate=0, unlimited). Depth applies to reflected mode, parallel to reflected/stored,
and rate to HTTP modes. DOM rejects HTTP tuning. Worker count does not promise
parallel HTTP throughput; shared-session HTTP transactions remain serialized.
UTF-8 BOM is supported. Unknown/duplicate fields, invalid types/version, negative
depth/rate, parallel below one, nonfinite rate and irrelevant mode settings return
exit 2 before target/session/browser I/O. CLI overrides cannot hide invalid config.
Targets, credentials and output paths are not config fields. dxaprove --spec
retains its separate proof contract.
Config scope and validation.
Staj ve araştırma kayıtları
- 11 tarihsel teknik yazı: XSS, SQLi, JWT, BOLA ve araç geliştirme.
- Ham v3.10 raporları: 50 JSON-only, iki Bludit dinamik kayıt ve 78 statik MEDIUM aday; bağımsız açık toplamı değil.
- Görseller: çalışma ve bazı challenge/source/filtre adımlarının kanıtı; tüm anlatılan execution sonuçlarının bağımsız ispatı değil.
- Araştırma kayıtları: tarihsel duplicate/yeniden üretim beyanları; kabul kayıtları ve yeni CVE kredisi bu ZIP'ten bağımsız doğrulanamıyor.
Güncel bir vaka için sürüm, komut, maskeli request/response, canary proof, negatif kontrol ve fix sonrası retest birlikte yayımlanacak. Geçmiş iddiaların kanıt seviyesi STATUS ve roadmap tarafından sınırlandırılır.
Öncelik
Doğru kanıt modeli → güvenilir oturum/istek → tarayıcı entegrasyonu → doğru benchmark → tekrar üretilebilir XSS vakası → kullanılabilir sürüm. Genel recon, çok dilli AST ve plugin ekosistemi bu zincirin önüne geçmez.
MIT lisansı. Eski README yalnız tarihsel kayıttır.
Metadata
Release files for dxa-research-toolkit 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| dxa_research_toolkit-0.2.0.tar.gz | 112.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dxa_research_toolkit-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 223.4 kB
Release files / dxa_research_toolkit-0.2.0.tar.gz
| Download URL | dxa_research_toolkit-0.2.0.tar.gz |
|---|---|
| Size | 112.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
47e313a2cbbc925fe67d8640a01de5874f0647d3a2299fa51bb8db7c9b77af96
|
|
BLAKE2b-256 checksum How to use checksums |
44eae95918b937cc2bb8826517ac765eb37d3cdc03f09199c5f63abf83d5c165
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.5
|
Release files / dxa_research_toolkit-0.2.0-py3-none-any.whl
| Download URL | dxa_research_toolkit-0.2.0-py3-none-any.whl |
|---|---|
| Size | 110.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cd5c83ecd9c904878d66c1623187caaa03bc4cff9229bee949807ca4639912cd
|
|
BLAKE2b-256 checksum How to use checksums |
f65866ac6b6d4b55d8b510135feca63e2bb531e29f77f46e73e4df9210295b31
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.5
|
Security for dxa-research-toolkit 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.