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.
- dxa_research_toolkit-0.2.0/LICENSE +21 -0
- dxa_research_toolkit-0.2.0/PKG-INFO +294 -0
- dxa_research_toolkit-0.2.0/README.md +258 -0
- dxa_research_toolkit-0.2.0/pyproject.toml +32 -0
- dxa_research_toolkit-0.2.0/setup.cfg +4 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa.py +1124 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa2dyn.py +196 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_attempts.py +228 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_callback.py +479 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_evidence.py +244 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_proof_lab.py +153 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/PKG-INFO +294 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/SOURCES.txt +26 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/dependency_links.txt +1 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/entry_points.txt +5 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/requires.txt +7 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_research_toolkit.egg-info/top_level.txt +11 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_sarif.py +228 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxa_sarif_cli.py +45 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxadom.py +819 -0
- dxa_research_toolkit-0.2.0/tools/dom-xss-analyzer/dxadyn.py +3182 -0
- 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"
|