dxa-research-toolkit 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. dxa_research_toolkit-0.2.0/LICENSE +21 -0
  2. dxa_research_toolkit-0.2.0/PKG-INFO +294 -0
  3. dxa_research_toolkit-0.2.0/README.md +258 -0
  4. dxa_research_toolkit-0.2.0/pyproject.toml +32 -0
  5. dxa_research_toolkit-0.2.0/setup.cfg +4 -0
  6. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa.py +1124 -0
  7. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa2dyn.py +196 -0
  8. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_attempts.py +228 -0
  9. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_callback.py +479 -0
  10. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_evidence.py +244 -0
  11. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_proof_lab.py +153 -0
  12. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/PKG-INFO +294 -0
  13. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/SOURCES.txt +26 -0
  14. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/dependency_links.txt +1 -0
  15. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/entry_points.txt +5 -0
  16. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/requires.txt +7 -0
  17. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/top_level.txt +11 -0
  18. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_sarif.py +228 -0
  19. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_sarif_cli.py +45 -0
  20. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxadom.py +819 -0
  21. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxadyn.py +3182 -0
  22. dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxaprove.py +300 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Kadircan Calışgan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,294 @@
1
+ Metadata-Version: 2.4
2
+ Name: dxa-research-toolkit
3
+ Version: 0.2.0
4
+ Summary: Research CLI for XSS candidate analysis and local proof labs
5
+ License: MIT License
6
+
7
+ Copyright (c) 2026 Kadircan Calışgan
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+
27
+ Requires-Python: >=3.10
28
+ Description-Content-Type: text/markdown
29
+ License-File: LICENSE
30
+ Provides-Extra: browser
31
+ Requires-Dist: playwright==1.63.0; extra == "browser"
32
+ Provides-Extra: test
33
+ Requires-Dist: pytest; extra == "test"
34
+ Requires-Dist: jsonschema<5,>=4.18; extra == "test"
35
+ Dynamic: license-file
36
+
37
+ # XSS Research Lab & Bot
38
+
39
+ An experimental Python CLI toolkit for XSS research and evidence collection.
40
+ Project work combines static source/sink candidate analysis, bounded HTTP
41
+ reflection checks, and browser observations in controlled labs. Reports keep
42
+ those observations separate from CID-matched JavaScript execution and from
43
+ vulnerability triage. The project is a research-support prototype, not a
44
+ general-purpose autonomous scanner.
45
+
46
+ **Project summary:** The work focuses on implementing and validating a
47
+ repeatable analysis workflow: inspect candidate source/sink paths, observe
48
+ bounded HTTP/browser behavior, preserve evidence boundaries, and test fixes in
49
+ local fixtures. The retained acceptance includes controlled corpus and
50
+ loopback-fixture checks; it does not establish broad real-world detection
51
+ accuracy, independent product findings, competitor superiority, or newly
52
+ discovered CVEs. Install the package with:
53
+
54
+ ```console
55
+ python -m pip install dxa-research-toolkit
56
+ ```
57
+
58
+ The accepted `0.1.0` wheel remains available through the historical
59
+ [GitHub Release](https://github.com/calsgnkadir/XSS-Research-Validation-Toolkit/releases/tag/v0.1.0).
60
+ Current tag and artifact status is recorded in [STATUS](STATUS.md). Use the
61
+ tools only on systems you own or are explicitly authorized to test.
62
+
63
+ ## Current status
64
+
65
+ This is an experimental research toolkit, not a general-purpose vulnerability
66
+ scanner. The `v0.1.0` GitHub Release remains available as a historical release;
67
+ this source checkout includes later changes. Bounded acceptance
68
+ for R0–R6, the Python AST pilot (R8), and the declared operational scope (R9)
69
+ is complete. E05's measured textarea parser-context extension is accepted
70
+ within its narrow scope. A04 is bounded complete for the selected local GET
71
+ routes. A05's selected advisory dispositions have now been rebound to current
72
+ Kadrom source `eb031a1`; the regenerated 248-coordinate dependency tree matches
73
+ the prior query hash, with no new applicable candidate among the reviewed leads.
74
+ A05 remains partial: one malformed multipart cleanup fixture passed, while
75
+ deployment-wide and broader runtime conditions remain open. The local authorized
76
+ Kadrom checkout exists, but no current-source app deployment or active proxy/WAF
77
+ was available for those checks. A fresh isolated runtime attempt built the
78
+ current JAR, but host-to-MySQL connectivity failed before the app bound its
79
+ health port; no health/auth requests were sent. R7's bounded local research is complete; this
80
+ does not establish vulnerability absence. See the [A05 runtime attempt](audit/2026-10-24-a05-isolated-runtime/README.md).
81
+ Current handoff, open work and evidence limits are in [STATUS](STATUS.md), the
82
+ [roadmap](ROADMAP.md), and the [validation log](VALIDATION.md).
83
+ The current feature-freeze decision, CVE-source roles, and evidence-based CV
84
+ wording are in the [CVE and portfolio review](audit/2026-10-24-cve-portfolio-review/README.md).
85
+
86
+ On 24 October, an independent K03 replay completed 17 requests against the
87
+ existing local Juice Shop 20.2.0 image in an internal-only lab; it reproduced
88
+ the documented SQLi-shaped login, unsigned JWT, and synthetic cross-account
89
+ basket behaviors. This is a new training-lab replay, not validation of the old
90
+ sessions or a CVE finding. K04 source review found that the pinned image's
91
+ current login-IP sanitizer path does not match the historical regex
92
+ reassembly claim, so no faithful K04 runtime retest was run. See the separate
93
+ [K03](audit/2026-10-24-k03-independent-retest/README.md) and
94
+ [K04](audit/2026-10-24-k04-independent-retest/README.md) records.
95
+ Three evidence-based case drafts for K01, E05, and the known BCrypt issue are in
96
+ the [portfolio preparation audit](audit/2026-10-24-portfolio-cases/README.md).
97
+ The concise [CV draft](docs/PORTFOLIO-CV-DRAFT.md) is separate from the
98
+ supporting evidence. K04's local artifact search found no matching historical
99
+ Juice Shop source/image; its retest remains blocked on that artifact.
100
+ The follow-up found no faithful local K04 image for a runtime retest and no
101
+ currently running current-source Kadrom deployment for broad A05 checks; see
102
+ [K04 testability](audit/2026-10-24-k04-retest-followup/README.md) and
103
+ [K04 local artifact search](audit/2026-10-24-k04-artifact-search-retest/README.md),
104
+ and [A05 environment readiness](audit/2026-10-24-a05-authorized-environment/README.md).
105
+
106
+ The A05/E05 evidence delivery is `e56ae60` on `main`; local HEAD matched
107
+ `origin/main` when checked. Its
108
+ [hosted CI](https://github.com/calsgnkadir/XSS-Research-Validation-Toolkit/actions/runs/40086961102)
109
+ analyzer, required authenticated-browser and optional dxadom-browser jobs
110
+ completed successfully; [K01 Linux CI](https://github.com/calsgnkadir/XSS-Research-Validation-Toolkit/actions/runs/40086961111)
111
+ also succeeded. These are hosted job results; artifacts were not downloaded
112
+ for independent review. The latest local E05 selected acceptance passed
113
+ **381 tests with zero skips** and its installed CLI gate passed **9 controls**;
114
+ the A05 parser fixture passed **1 test**. These bounded checks are not broad
115
+ detection-accuracy or vulnerability-discovery measurements. See the respective
116
+ [E05 evidence](audit/2026-10-24-e05-context/README.md) and
117
+ [A05 evidence](audit/2026-10-24-a05-multipart-cleanup/README.md).
118
+
119
+ ## Selected evidence-backed cases
120
+
121
+ - **Stored XSS proof → fix → retest:** [K01 local fixture](cases/k01-stored-comment/README.md)
122
+ records one CID-matched browser execution, four negative controls, HTML text
123
+ encoding, and retest. It is a training fixture, not a product/CVE claim.
124
+ - **Tooling failure → regression:** [R9 browser-fixture follow-up](audit/2026-10-16-r6-r9-final-source/README.md)
125
+ records serial fixture failures, the threaded-server correction, and the
126
+ full local Chrome DOM suite. This measures fixture reliability, not scanner
127
+ accuracy.
128
+ - **Controlled research replay:** [R4 exact-payload replay](audit/r4-proof-experiment-2026-10-16/README.md)
129
+ checks stored scanner candidates in separate writer/reader-admin loopback
130
+ fixtures with escaped controls. Some outcomes remain inconclusive; it is not
131
+ a fresh scanner comparison or a vulnerability ranking.
132
+
133
+ [Install and run the local demos](docs/PORTFOLIO-DEMO.md).
134
+
135
+ Stored/stored-auto blind denemeleri artık yansıma olmasa da kalıcı kaydedilir;
136
+ tarama sonrası callback kontrolü ve JSON/HTML kayıt raporu vardır.
137
+ [Kullanım ve kapsam](tools/dom-xss-analyzer/BLIND-JOURNAL.md). Callback, JS proof değildir.
138
+
139
+ HTTP modları ortak bulgu üreticisi kullanır: ham marker ve JSON yanıtı execution
140
+ sayılmaz. `--json-out` ve `--html` aynı finding'leri raporlar.
141
+ [Kanıt modeli ve uyumluluk değişiklikleri](tools/dom-xss-analyzer/HTTP-EVIDENCE.md).
142
+
143
+ Source checkouts also provide offline [SARIF 2.1.0 export](tools/dom-xss-analyzer/SARIF.md):
144
+ `dxa-sarif evidence.json --output evidence.sarif`. Results preserve observation
145
+ and triage categories as review records, without vulnerability severity or
146
+ execution claims. This addition is unreleased; the existing release asset is unchanged.
147
+
148
+ **R1 kabul kapsamı tamamlandı:** resmî kanıt sözleşmesi, statik/HTTP/DOM/journal
149
+ ortak raporları, hata/atlama olayları ve rol/sink ayrımını koruyan dedup.
150
+ [Madde bazında kapanış](audit/2026-10-05-r1/R1-KAPANIS.md).
151
+ R2 HTTP kabulü tamam: [oturum kontrolü, rate ve CSRF sözleşmesi](tools/dom-xss-analyzer/SESSION-CONTRACT.md).
152
+ 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ışı.
153
+ [R3 demo ve kapsam](tools/dom-xss-analyzer/BROWSER-PROOF.md).
154
+
155
+ **İlk güncel vaka:** [K01 stored yorum — execution → fix → retest](cases/k01-stored-comment/README.md).
156
+ Yerel fixture'da ayrı okuyucu tarayıcısıyla 5/5 kontrol geçti; aynı payload output
157
+ encoding sonrası düz metin kaldı. Bu vaka kanıtıdır; genel bot execution motoru değildir.
158
+
159
+ [Denetim raporu](audit/2026-09-28/DENETIM-RAPORU-TR.md) ve
160
+ [dosya bazında inceleme](audit/2026-09-28/DOSYA-INCELEMESI-TR.md) depoda bulunur.
161
+
162
+ - [Güncel durum ve sınırlar](STATUS.md)
163
+ - [Ana proje roadmap'i: bot, rapor/kanıt, portfolyo, staj, araştırma/CVE](ROADMAP.md)
164
+ - [76 dosyanın görev eşlemesi](DOSYA-KAPSAM.md)
165
+ - [Test ve doğrulama kaydı](VALIDATION.md)
166
+ - [Değişiklik kaydı](CHANGELOG.md)
167
+ - [Eski mesajın değerlendirmesi](HISTORY-NOTES.md)
168
+
169
+ ## Araçlar
170
+
171
+ | Bileşen | İşlev | Sınır |
172
+ |---|---|---|
173
+ | `dxa.py` | Static source/sink candidates, with a bounded Python AST pilot | Language coverage differs; this is not general sound data-flow analysis |
174
+ | `dxadyn.py` | HTTP reflection, stored checks, and bounded same-origin discovery | Findings are candidates/reflections; they do not alone establish XSS |
175
+ | `dxadom.py` | Playwright page, sink, dialog, route, and header observations | Bounded loopback adapter; observation is distinct from CID-matched execution |
176
+ | `dxa_callback.py` | Local callback collection and lookup | A matched callback is `resource-callback`, not JavaScript execution |
177
+ | `dxa2dyn.py` | Parameter hints from static candidates | A hint is not a complete source-to-sink proof |
178
+
179
+ Payload corpus metadata includes 50 base variants and 18 mutation definitions.
180
+ The historical generator count of 950 payload strings (895 after removing
181
+ CID-specific uniqueness) describes generated test inputs only; it is not a
182
+ count of working exploits, successful executions, WAF bypasses, or findings.
183
+ HTTP/statik çekirdek stdlib kullanır; testler pytest, tarayıcı gözlemcisi Playwright ve uygun browser gerektirir.
184
+
185
+ ## Yerel kurulum ve smoke kontrolü
186
+
187
+ Python 3.10 veya üstü gerekir. Depo kökünde temel CLI'ları sanal ortama kurup
188
+ yardım ekranlarını kontrol et:
189
+
190
+ ```console
191
+ python -m venv .venv
192
+ ```
193
+
194
+ Windows PowerShell:
195
+
196
+ ```powershell
197
+ .venv\Scripts\Activate.ps1
198
+ python -m pip install .
199
+ dxa --help
200
+ dxadyn --help
201
+ dxaprove --help
202
+ ```
203
+
204
+ macOS/Linux:
205
+
206
+ ```console
207
+ source .venv/bin/activate
208
+ python -m pip install .
209
+ dxa --help
210
+ dxadyn --help
211
+ dxaprove --help
212
+ ```
213
+
214
+ Temel kurulumun zorunlu çalışma zamanı bağımlılığı yoktur. Browser proof demo'su
215
+ için aynı ortamda isteğe bağlı, `playwright==1.63.0` sürümüne sabitlenmiş
216
+ browser extra'yı kur ve Chromium binary'sini ayrıca yükle:
217
+
218
+ ```console
219
+ python -m pip install ".[browser]"
220
+ python -m playwright install chromium
221
+ dxaprove --demo --output demo-evidence
222
+ ```
223
+
224
+ Demo kendi geçici loopback fixture'ını açıp kapatır. Yeni bir çıktı klasörü
225
+ kullan. `execution-observed` yalnız bu fixture'daki canary gözlemidir; açıklık
226
+ triage'ı veya genel tarayıcı doğruluğu değildir. İzinli başka bir loopback lab
227
+ için `dxaprove --spec <yerel-json>` kullanılabilir; bu proof sözleşmesi `dxa`
228
+ ve `dxadyn` tarama config'lerinden ayrıdır. Tarama komutlarını yalnız kendi
229
+ yerel fixture'larında veya açıkça yetkili hedeflerde çalıştır.
230
+
231
+ Depo metadata'sında ilk araştırma sürümü `dxa-research-toolkit 0.1.0` olarak
232
+ seçilmiştir. Bu checkout sürüm ve release notlarını hazırlar; PyPI yayını veya
233
+ Git release etiketi yapıldığı anlamına gelmez. Ürün deneysel bir araştırma
234
+ yardımcısıdır; kapsam ve kanıt sınırları için aşağıdaki notları ve ilgili audit
235
+ kayıtlarını inceleyin. CLI'ları kaynak dosyalarından doğrudan çalıştırmak da
236
+ mümkündür.
237
+
238
+ `dxadyn` için `--dom`, `--stored` ve `--flow` ana modları birlikte seçilemez.
239
+ Stored/flow hedefi kendi seçeneklerinden verilir; positional URL eklenmez.
240
+ `--dom` HTTP oturum seçeneklerini (`--login`, `--auth-flow`, `--auth-check`,
241
+ `--cookie`, `--header`, `--csrf-refresh`, `--csrf-header`) kabul etmez.
242
+ Desteklenmeyen birleşimler ağ/browser işlemi ve rapor yazımı başlamadan exit 2
243
+ verir. Oturumlu browser proof için `dxaprove` kullanılır.
244
+
245
+ Statik `dxa` CLI için isteğe bağlı JSON config örneği:
246
+
247
+ ```json
248
+ {"schema_version": 1, "min_confidence": "medium"}
249
+ ```
250
+
251
+ `dxa <yerel-kaynak> --config scan.json` komutunda öncelik
252
+ `--min-confidence` > config > varsayılan `low` şeklindedir. Bu dar config
253
+ sözleşmesi yalnız statik CLI için geçerlidir; dosyaya oturum bilgisi koymayın.
254
+
255
+ Dynamic `dxadyn` has a separate, limited HTTP tuning config:
256
+
257
+ ```json
258
+ {"schema_version": 1, "depth": 1, "parallel": 1, "rate": 0}
259
+ ```
260
+
261
+ For an authorized local target, `dxadyn <local-url> --config http.json --depth 0`
262
+ uses explicit CLI values before config, then defaults (`depth=0`, `parallel=1`,
263
+ `rate=0`, unlimited). Depth applies to reflected mode, parallel to reflected/stored,
264
+ and rate to HTTP modes. DOM rejects HTTP tuning. Worker count does not promise
265
+ parallel HTTP throughput; shared-session HTTP transactions remain serialized.
266
+
267
+ UTF-8 BOM is supported. Unknown/duplicate fields, invalid types/version, negative
268
+ depth/rate, parallel below one, nonfinite rate and irrelevant mode settings return
269
+ exit 2 before target/session/browser I/O. CLI overrides cannot hide invalid config.
270
+ Targets, credentials and output paths are not config fields. `dxaprove --spec`
271
+ retains its separate proof contract.
272
+ [Config scope and validation](audit/2026-10-15-r6-config-release/README.md).
273
+
274
+ ## Staj ve araştırma kayıtları
275
+
276
+ - [11 tarihsel teknik yazı](writeups/README.md): XSS, SQLi, JWT, BOLA ve araç geliştirme.
277
+ - [Ham v3.10 raporları](reports/2026-09-26-v310-live/README.md): 50 JSON-only,
278
+ iki Bludit dinamik kayıt ve 78 statik MEDIUM aday; bağımsız açık toplamı değil.
279
+ - [Görseller](screenshots/README.md): çalışma ve bazı challenge/source/filtre adımlarının kanıtı;
280
+ tüm anlatılan execution sonuçlarının bağımsız ispatı değil.
281
+ - [Araştırma kayıtları](research/README.md): tarihsel duplicate/yeniden üretim beyanları;
282
+ kabul kayıtları ve yeni CVE kredisi bu ZIP'ten bağımsız doğrulanamıyor.
283
+
284
+ Güncel bir vaka için sürüm, komut, maskeli request/response, canary proof,
285
+ negatif kontrol ve fix sonrası retest birlikte yayımlanacak. Geçmiş iddiaların
286
+ kanıt seviyesi STATUS ve roadmap tarafından sınırlandırılır.
287
+
288
+ ## Öncelik
289
+
290
+ Doğru kanıt modeli → güvenilir oturum/istek → tarayıcı entegrasyonu → doğru
291
+ benchmark → tekrar üretilebilir XSS vakası → kullanılabilir sürüm.
292
+ Genel recon, çok dilli AST ve plugin ekosistemi bu zincirin önüne geçmez.
293
+
294
+ [MIT lisansı](LICENSE). [Eski README](README-LEGACY.md) yalnız tarihsel kayıttır.
@@ -0,0 +1,258 @@
1
+ # XSS Research Lab & Bot
2
+
3
+ An experimental Python CLI toolkit for XSS research and evidence collection.
4
+ Project work combines static source/sink candidate analysis, bounded HTTP
5
+ reflection checks, and browser observations in controlled labs. Reports keep
6
+ those observations separate from CID-matched JavaScript execution and from
7
+ vulnerability triage. The project is a research-support prototype, not a
8
+ general-purpose autonomous scanner.
9
+
10
+ **Project summary:** The work focuses on implementing and validating a
11
+ repeatable analysis workflow: inspect candidate source/sink paths, observe
12
+ bounded HTTP/browser behavior, preserve evidence boundaries, and test fixes in
13
+ local fixtures. The retained acceptance includes controlled corpus and
14
+ loopback-fixture checks; it does not establish broad real-world detection
15
+ accuracy, independent product findings, competitor superiority, or newly
16
+ discovered CVEs. Install the package with:
17
+
18
+ ```console
19
+ python -m pip install dxa-research-toolkit
20
+ ```
21
+
22
+ The accepted `0.1.0` wheel remains available through the historical
23
+ [GitHub Release](https://github.com/calsgnkadir/XSS-Research-Validation-Toolkit/releases/tag/v0.1.0).
24
+ Current tag and artifact status is recorded in [STATUS](STATUS.md). Use the
25
+ tools only on systems you own or are explicitly authorized to test.
26
+
27
+ ## Current status
28
+
29
+ This is an experimental research toolkit, not a general-purpose vulnerability
30
+ scanner. The `v0.1.0` GitHub Release remains available as a historical release;
31
+ this source checkout includes later changes. Bounded acceptance
32
+ for R0–R6, the Python AST pilot (R8), and the declared operational scope (R9)
33
+ is complete. E05's measured textarea parser-context extension is accepted
34
+ within its narrow scope. A04 is bounded complete for the selected local GET
35
+ routes. A05's selected advisory dispositions have now been rebound to current
36
+ Kadrom source `eb031a1`; the regenerated 248-coordinate dependency tree matches
37
+ the prior query hash, with no new applicable candidate among the reviewed leads.
38
+ A05 remains partial: one malformed multipart cleanup fixture passed, while
39
+ deployment-wide and broader runtime conditions remain open. The local authorized
40
+ Kadrom checkout exists, but no current-source app deployment or active proxy/WAF
41
+ was available for those checks. A fresh isolated runtime attempt built the
42
+ current JAR, but host-to-MySQL connectivity failed before the app bound its
43
+ health port; no health/auth requests were sent. R7's bounded local research is complete; this
44
+ does not establish vulnerability absence. See the [A05 runtime attempt](audit/2026-10-24-a05-isolated-runtime/README.md).
45
+ Current handoff, open work and evidence limits are in [STATUS](STATUS.md), the
46
+ [roadmap](ROADMAP.md), and the [validation log](VALIDATION.md).
47
+ The current feature-freeze decision, CVE-source roles, and evidence-based CV
48
+ wording are in the [CVE and portfolio review](audit/2026-10-24-cve-portfolio-review/README.md).
49
+
50
+ On 24 October, an independent K03 replay completed 17 requests against the
51
+ existing local Juice Shop 20.2.0 image in an internal-only lab; it reproduced
52
+ the documented SQLi-shaped login, unsigned JWT, and synthetic cross-account
53
+ basket behaviors. This is a new training-lab replay, not validation of the old
54
+ sessions or a CVE finding. K04 source review found that the pinned image's
55
+ current login-IP sanitizer path does not match the historical regex
56
+ reassembly claim, so no faithful K04 runtime retest was run. See the separate
57
+ [K03](audit/2026-10-24-k03-independent-retest/README.md) and
58
+ [K04](audit/2026-10-24-k04-independent-retest/README.md) records.
59
+ Three evidence-based case drafts for K01, E05, and the known BCrypt issue are in
60
+ the [portfolio preparation audit](audit/2026-10-24-portfolio-cases/README.md).
61
+ The concise [CV draft](docs/PORTFOLIO-CV-DRAFT.md) is separate from the
62
+ supporting evidence. K04's local artifact search found no matching historical
63
+ Juice Shop source/image; its retest remains blocked on that artifact.
64
+ The follow-up found no faithful local K04 image for a runtime retest and no
65
+ currently running current-source Kadrom deployment for broad A05 checks; see
66
+ [K04 testability](audit/2026-10-24-k04-retest-followup/README.md) and
67
+ [K04 local artifact search](audit/2026-10-24-k04-artifact-search-retest/README.md),
68
+ and [A05 environment readiness](audit/2026-10-24-a05-authorized-environment/README.md).
69
+
70
+ The A05/E05 evidence delivery is `e56ae60` on `main`; local HEAD matched
71
+ `origin/main` when checked. Its
72
+ [hosted CI](https://github.com/calsgnkadir/XSS-Research-Validation-Toolkit/actions/runs/40086961102)
73
+ analyzer, required authenticated-browser and optional dxadom-browser jobs
74
+ completed successfully; [K01 Linux CI](https://github.com/calsgnkadir/XSS-Research-Validation-Toolkit/actions/runs/40086961111)
75
+ also succeeded. These are hosted job results; artifacts were not downloaded
76
+ for independent review. The latest local E05 selected acceptance passed
77
+ **381 tests with zero skips** and its installed CLI gate passed **9 controls**;
78
+ the A05 parser fixture passed **1 test**. These bounded checks are not broad
79
+ detection-accuracy or vulnerability-discovery measurements. See the respective
80
+ [E05 evidence](audit/2026-10-24-e05-context/README.md) and
81
+ [A05 evidence](audit/2026-10-24-a05-multipart-cleanup/README.md).
82
+
83
+ ## Selected evidence-backed cases
84
+
85
+ - **Stored XSS proof → fix → retest:** [K01 local fixture](cases/k01-stored-comment/README.md)
86
+ records one CID-matched browser execution, four negative controls, HTML text
87
+ encoding, and retest. It is a training fixture, not a product/CVE claim.
88
+ - **Tooling failure → regression:** [R9 browser-fixture follow-up](audit/2026-10-16-r6-r9-final-source/README.md)
89
+ records serial fixture failures, the threaded-server correction, and the
90
+ full local Chrome DOM suite. This measures fixture reliability, not scanner
91
+ accuracy.
92
+ - **Controlled research replay:** [R4 exact-payload replay](audit/r4-proof-experiment-2026-10-16/README.md)
93
+ checks stored scanner candidates in separate writer/reader-admin loopback
94
+ fixtures with escaped controls. Some outcomes remain inconclusive; it is not
95
+ a fresh scanner comparison or a vulnerability ranking.
96
+
97
+ [Install and run the local demos](docs/PORTFOLIO-DEMO.md).
98
+
99
+ Stored/stored-auto blind denemeleri artık yansıma olmasa da kalıcı kaydedilir;
100
+ tarama sonrası callback kontrolü ve JSON/HTML kayıt raporu vardır.
101
+ [Kullanım ve kapsam](tools/dom-xss-analyzer/BLIND-JOURNAL.md). Callback, JS proof değildir.
102
+
103
+ HTTP modları ortak bulgu üreticisi kullanır: ham marker ve JSON yanıtı execution
104
+ sayılmaz. `--json-out` ve `--html` aynı finding'leri raporlar.
105
+ [Kanıt modeli ve uyumluluk değişiklikleri](tools/dom-xss-analyzer/HTTP-EVIDENCE.md).
106
+
107
+ Source checkouts also provide offline [SARIF 2.1.0 export](tools/dom-xss-analyzer/SARIF.md):
108
+ `dxa-sarif evidence.json --output evidence.sarif`. Results preserve observation
109
+ and triage categories as review records, without vulnerability severity or
110
+ execution claims. This addition is unreleased; the existing release asset is unchanged.
111
+
112
+ **R1 kabul kapsamı tamamlandı:** resmî kanıt sözleşmesi, statik/HTTP/DOM/journal
113
+ ortak raporları, hata/atlama olayları ve rol/sink ayrımını koruyan dedup.
114
+ [Madde bazında kapanış](audit/2026-10-05-r1/R1-KAPANIS.md).
115
+ R2 HTTP kabulü tamam: [oturum kontrolü, rate ve CSRF sözleşmesi](tools/dom-xss-analyzer/SESSION-CONTRACT.md).
116
+ 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ışı.
117
+ [R3 demo ve kapsam](tools/dom-xss-analyzer/BROWSER-PROOF.md).
118
+
119
+ **İlk güncel vaka:** [K01 stored yorum — execution → fix → retest](cases/k01-stored-comment/README.md).
120
+ Yerel fixture'da ayrı okuyucu tarayıcısıyla 5/5 kontrol geçti; aynı payload output
121
+ encoding sonrası düz metin kaldı. Bu vaka kanıtıdır; genel bot execution motoru değildir.
122
+
123
+ [Denetim raporu](audit/2026-09-28/DENETIM-RAPORU-TR.md) ve
124
+ [dosya bazında inceleme](audit/2026-09-28/DOSYA-INCELEMESI-TR.md) depoda bulunur.
125
+
126
+ - [Güncel durum ve sınırlar](STATUS.md)
127
+ - [Ana proje roadmap'i: bot, rapor/kanıt, portfolyo, staj, araştırma/CVE](ROADMAP.md)
128
+ - [76 dosyanın görev eşlemesi](DOSYA-KAPSAM.md)
129
+ - [Test ve doğrulama kaydı](VALIDATION.md)
130
+ - [Değişiklik kaydı](CHANGELOG.md)
131
+ - [Eski mesajın değerlendirmesi](HISTORY-NOTES.md)
132
+
133
+ ## Araçlar
134
+
135
+ | Bileşen | İşlev | Sınır |
136
+ |---|---|---|
137
+ | `dxa.py` | Static source/sink candidates, with a bounded Python AST pilot | Language coverage differs; this is not general sound data-flow analysis |
138
+ | `dxadyn.py` | HTTP reflection, stored checks, and bounded same-origin discovery | Findings are candidates/reflections; they do not alone establish XSS |
139
+ | `dxadom.py` | Playwright page, sink, dialog, route, and header observations | Bounded loopback adapter; observation is distinct from CID-matched execution |
140
+ | `dxa_callback.py` | Local callback collection and lookup | A matched callback is `resource-callback`, not JavaScript execution |
141
+ | `dxa2dyn.py` | Parameter hints from static candidates | A hint is not a complete source-to-sink proof |
142
+
143
+ Payload corpus metadata includes 50 base variants and 18 mutation definitions.
144
+ The historical generator count of 950 payload strings (895 after removing
145
+ CID-specific uniqueness) describes generated test inputs only; it is not a
146
+ count of working exploits, successful executions, WAF bypasses, or findings.
147
+ HTTP/statik çekirdek stdlib kullanır; testler pytest, tarayıcı gözlemcisi Playwright ve uygun browser gerektirir.
148
+
149
+ ## Yerel kurulum ve smoke kontrolü
150
+
151
+ Python 3.10 veya üstü gerekir. Depo kökünde temel CLI'ları sanal ortama kurup
152
+ yardım ekranlarını kontrol et:
153
+
154
+ ```console
155
+ python -m venv .venv
156
+ ```
157
+
158
+ Windows PowerShell:
159
+
160
+ ```powershell
161
+ .venv\Scripts\Activate.ps1
162
+ python -m pip install .
163
+ dxa --help
164
+ dxadyn --help
165
+ dxaprove --help
166
+ ```
167
+
168
+ macOS/Linux:
169
+
170
+ ```console
171
+ source .venv/bin/activate
172
+ python -m pip install .
173
+ dxa --help
174
+ dxadyn --help
175
+ dxaprove --help
176
+ ```
177
+
178
+ Temel kurulumun zorunlu çalışma zamanı bağımlılığı yoktur. Browser proof demo'su
179
+ için aynı ortamda isteğe bağlı, `playwright==1.63.0` sürümüne sabitlenmiş
180
+ browser extra'yı kur ve Chromium binary'sini ayrıca yükle:
181
+
182
+ ```console
183
+ python -m pip install ".[browser]"
184
+ python -m playwright install chromium
185
+ dxaprove --demo --output demo-evidence
186
+ ```
187
+
188
+ Demo kendi geçici loopback fixture'ını açıp kapatır. Yeni bir çıktı klasörü
189
+ kullan. `execution-observed` yalnız bu fixture'daki canary gözlemidir; açıklık
190
+ triage'ı veya genel tarayıcı doğruluğu değildir. İzinli başka bir loopback lab
191
+ için `dxaprove --spec <yerel-json>` kullanılabilir; bu proof sözleşmesi `dxa`
192
+ ve `dxadyn` tarama config'lerinden ayrıdır. Tarama komutlarını yalnız kendi
193
+ yerel fixture'larında veya açıkça yetkili hedeflerde çalıştır.
194
+
195
+ Depo metadata'sında ilk araştırma sürümü `dxa-research-toolkit 0.1.0` olarak
196
+ seçilmiştir. Bu checkout sürüm ve release notlarını hazırlar; PyPI yayını veya
197
+ Git release etiketi yapıldığı anlamına gelmez. Ürün deneysel bir araştırma
198
+ yardımcısıdır; kapsam ve kanıt sınırları için aşağıdaki notları ve ilgili audit
199
+ kayıtlarını inceleyin. CLI'ları kaynak dosyalarından doğrudan çalıştırmak da
200
+ mümkündür.
201
+
202
+ `dxadyn` için `--dom`, `--stored` ve `--flow` ana modları birlikte seçilemez.
203
+ Stored/flow hedefi kendi seçeneklerinden verilir; positional URL eklenmez.
204
+ `--dom` HTTP oturum seçeneklerini (`--login`, `--auth-flow`, `--auth-check`,
205
+ `--cookie`, `--header`, `--csrf-refresh`, `--csrf-header`) kabul etmez.
206
+ Desteklenmeyen birleşimler ağ/browser işlemi ve rapor yazımı başlamadan exit 2
207
+ verir. Oturumlu browser proof için `dxaprove` kullanılır.
208
+
209
+ Statik `dxa` CLI için isteğe bağlı JSON config örneği:
210
+
211
+ ```json
212
+ {"schema_version": 1, "min_confidence": "medium"}
213
+ ```
214
+
215
+ `dxa <yerel-kaynak> --config scan.json` komutunda öncelik
216
+ `--min-confidence` > config > varsayılan `low` şeklindedir. Bu dar config
217
+ sözleşmesi yalnız statik CLI için geçerlidir; dosyaya oturum bilgisi koymayın.
218
+
219
+ Dynamic `dxadyn` has a separate, limited HTTP tuning config:
220
+
221
+ ```json
222
+ {"schema_version": 1, "depth": 1, "parallel": 1, "rate": 0}
223
+ ```
224
+
225
+ For an authorized local target, `dxadyn <local-url> --config http.json --depth 0`
226
+ uses explicit CLI values before config, then defaults (`depth=0`, `parallel=1`,
227
+ `rate=0`, unlimited). Depth applies to reflected mode, parallel to reflected/stored,
228
+ and rate to HTTP modes. DOM rejects HTTP tuning. Worker count does not promise
229
+ parallel HTTP throughput; shared-session HTTP transactions remain serialized.
230
+
231
+ UTF-8 BOM is supported. Unknown/duplicate fields, invalid types/version, negative
232
+ depth/rate, parallel below one, nonfinite rate and irrelevant mode settings return
233
+ exit 2 before target/session/browser I/O. CLI overrides cannot hide invalid config.
234
+ Targets, credentials and output paths are not config fields. `dxaprove --spec`
235
+ retains its separate proof contract.
236
+ [Config scope and validation](audit/2026-10-15-r6-config-release/README.md).
237
+
238
+ ## Staj ve araştırma kayıtları
239
+
240
+ - [11 tarihsel teknik yazı](writeups/README.md): XSS, SQLi, JWT, BOLA ve araç geliştirme.
241
+ - [Ham v3.10 raporları](reports/2026-09-26-v310-live/README.md): 50 JSON-only,
242
+ iki Bludit dinamik kayıt ve 78 statik MEDIUM aday; bağımsız açık toplamı değil.
243
+ - [Görseller](screenshots/README.md): çalışma ve bazı challenge/source/filtre adımlarının kanıtı;
244
+ tüm anlatılan execution sonuçlarının bağımsız ispatı değil.
245
+ - [Araştırma kayıtları](research/README.md): tarihsel duplicate/yeniden üretim beyanları;
246
+ kabul kayıtları ve yeni CVE kredisi bu ZIP'ten bağımsız doğrulanamıyor.
247
+
248
+ Güncel bir vaka için sürüm, komut, maskeli request/response, canary proof,
249
+ negatif kontrol ve fix sonrası retest birlikte yayımlanacak. Geçmiş iddiaların
250
+ kanıt seviyesi STATUS ve roadmap tarafından sınırlandırılır.
251
+
252
+ ## Öncelik
253
+
254
+ Doğru kanıt modeli → güvenilir oturum/istek → tarayıcı entegrasyonu → doğru
255
+ benchmark → tekrar üretilebilir XSS vakası → kullanılabilir sürüm.
256
+ Genel recon, çok dilli AST ve plugin ekosistemi bu zincirin önüne geçmez.
257
+
258
+ [MIT lisansı](LICENSE). [Eski README](README-LEGACY.md) yalnız tarihsel kayıttır.
@@ -0,0 +1,32 @@
1
+ [build-system]
2
+ requires = ["setuptools>=65.5.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "dxa-research-toolkit"
7
+ version = "0.2.0"
8
+ description = "Research CLI for XSS candidate analysis and local proof labs"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = {file = "LICENSE"}
12
+ dependencies = []
13
+
14
+ [project.optional-dependencies]
15
+ browser = ["playwright==1.63.0"]
16
+ test = ["pytest", "jsonschema>=4.18,<5"]
17
+
18
+ [project.scripts]
19
+ dxa = "dxa:main"
20
+ dxadyn = "dxadyn:main"
21
+ dxaprove = "dxaprove:main"
22
+ dxa-sarif = "dxa_sarif_cli:main"
23
+
24
+ [tool.setuptools]
25
+ py-modules = [
26
+ "dxa", "dxadyn", "dxaprove", "dxadom", "dxa_evidence",
27
+ "dxa_callback", "dxa_attempts", "dxa_proof_lab", "dxa2dyn", "dxa_sarif",
28
+ "dxa_sarif_cli"
29
+ ]
30
+
31
+ [tool.setuptools.package-dir]
32
+ "" = "tools/dom-xss-analyzer"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+