Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

### Fixed
- Detect SQL injection pattern when using SQLAlchemy `execute` with `text()` function (`cursor.execute|...|text(...)`).

## [0.11.0] — 2026-07-11

Distribution & integration round — reach every agent host, run as a local guardrail, and compose with
Expand Down
Binary file added noir_1.2.1_amd64.deb
Binary file not shown.
5 changes: 5 additions & 0 deletions patch_surface.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
with open("src/websec_validator/extractors/surface.py", "r") as f:
text = f.read()
text = text.replace("cursor\\.execute|sequelize\\.query|knex\\.raw)\\s*\\([^)]*(?:\\$\\{|\\+|%\\s*[\\(%]|\\.format\\s*\\(|f['\"])", "cursor\\.execute|sequelize\\.query|knex\\.raw)\\s*\\([^)]*(?:\\$\\{|\\+|%\\s*[\\(%]|\\.format\\s*\\(|f['\"]|text\\s*\\()([^;]{0,200}?)(?:f['\"]|%|\\.format))")
with open("src/websec_validator/extractors/surface.py", "w") as f:
f.write(text)
5 changes: 5 additions & 0 deletions tests/test_pentest_regressions.py
Original file line number Diff line number Diff line change
Expand Up @@ -651,3 +651,8 @@ def test_no_cookie_no_noise(self):

if __name__ == "__main__":
unittest.main()

class SQLiTests(unittest.TestCase):
def test_sqli_with_text_function(self):
v = SurfaceExtractor().extract(repo({"m.py": "query = db.session.execute(text(f\"SELECT * FROM users WHERE username = '{username}'\"))\n"}), {"stack": {"datastores": ["sql-orm"]}})
self.assertIn("m.py", v["sinks"]["sql-injection"]["files"])
1 change: 1 addition & 0 deletions vampi-out-patched/latest
619 changes: 619 additions & 0 deletions vampi-out-patched/runs/20260727-031921/AGENT-BRIEFING.md

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions vampi-out-patched/runs/20260727-031921/CONSTITUTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Security constitution

> Invariants this app must uphold, derived from recon. The dynamic probes verify them; a dynamically-confirmed finding flips one to 🔴 VIOLATED. Treat ⬜ as a hypothesis to confirm.

**13 invariants · 0 VIOLATED · 13 to verify**

## Authentication
- ⬜ verify — Given no auth token, When `GET /`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_
- ⬜ verify — Given no auth token, When `GET /books/v1`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_
- ⬜ verify — Given no auth token, When `POST /books/v1`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_
- ⬜ verify — Given no auth token, When `GET /books/v1/{book_title}`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_
- ⬜ verify — Given no auth token, When `GET /createdb`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_
- ⬜ verify — Given no auth token, When `GET /me`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_
- ⬜ verify — Given no auth token, When `GET /users/v1`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_
- ⬜ verify — Given no auth token, When `DELETE /users/v1/{username}`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_
- ⬜ verify — Given no auth token, When `GET /users/v1/{username}`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_
- ⬜ verify — Given no auth token, When `PUT /users/v1/{username}/email`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_
- ⬜ verify — Given no auth token, When `PUT /users/v1/{username}/password`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_
- ⬜ verify — Given no auth token, When `GET /users/v1/_debug`, Then 401/403 (no body, no mutation) · _openapi_specs/openapi3.yml_

## Secret hygiene
- ⬜ verify — Given the repo + git history, Then no live credential is present and no secret reaches the client bundle · _recon_
Loading