Skip to content

Commit 3e888e4

Browse files
committed
Check every reasoning claim before filing it, and write it up for the developer
The finding page never showed a finding's description, only its title, so a reasoning finding read as a title and nothing else. It now shows what was found. Code reasoning writes each finding up for the developer: what it is, who can reach it, how it would be exploited, the impact, how to fix it and what to confirm. The write-up is cached with the answer, so forks, branches and later scans reuse it. Every claim, not only high ones, must now survive a second look that tries to prove it wrong. It sees the helpers the handler calls, where the permissions and roles it checks are granted elsewhere in the repository, and the names of access checks it was not shown. Only a claim it confirms is filed. None of that extra context is part of the cache key, so unchanged code is not asked about again. Check them again on the AI page gives findings filed before this the same look: confirmed ones get the write-up, guarded and unconfirmed ones are set aside with the reason, never closed, and nothing is checked twice. Curated web checks gain an anonymous flag, and the 149 that say something is exposed now send no session, so a signed in scan no longer reports a page open only to its own account as open to anybody. A policy test keeps new exposure checks the same. Two checks are added: a SCIM user directory that answers without credentials, and an OpenAPI or Swagger description served to anyone.
1 parent 1644789 commit 3e888e4

160 files changed

Lines changed: 657 additions & 17 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎app/core/code_reasoning.py‎

Lines changed: 319 additions & 15 deletions
Large diffs are not rendered by default.

‎app/core/dast_checks/curated/access-control-adminer-open.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"class": "access-control",
44
"safety": "read",
55
"severity_floor": "low",
6+
"anonymous": true,
67
"title": "Adminer sign in page is reachable from the internet",
78
"summary": "Adminer is an administrative interface and its sign in page answers from the internet. This proves it is exposed, not that it can be used without a password.",
89
"needs": [],

‎app/core/dast_checks/curated/access-control-airflow-open.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"class": "access-control",
44
"safety": "read",
55
"severity_floor": "high",
6+
"anonymous": true,
67
"title": "Apache Airflow is reachable without signing in",
78
"summary": "The Airflow API answers unauthenticated, which exposes the pipelines and can run or change them.",
89
"needs": [],

‎app/core/dast_checks/curated/access-control-argocd-open.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"class": "access-control",
44
"safety": "read",
55
"severity_floor": "medium",
6+
"anonymous": true,
67
"title": "An Argo CD API answers unauthenticated",
78
"summary": "The Argo CD API returns its version without a sign in, which usually means the GitOps controller is exposed.",
89
"needs": [],

‎app/core/dast_checks/curated/access-control-coldfusion-admin-exposed.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"class": "access-control",
44
"safety": "read",
55
"severity_floor": "low",
6+
"anonymous": true,
67
"title": "The ColdFusion Administrator sign in page is reachable from the internet",
78
"summary": "The ColdFusion Administrator is an administrative interface and its sign in page answers from the internet. This proves it is exposed, not that it can be used without a password. It has a long history of authentication bypass and remote code execution, so keeping it off the internet matters more than usual.",
89
"needs": [],

‎app/core/dast_checks/curated/access-control-consul-open.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"class": "access-control",
44
"safety": "read",
55
"severity_floor": "high",
6+
"anonymous": true,
67
"title": "HashiCorp Consul is reachable without signing in",
78
"summary": "The Consul agent API answers unauthenticated, which exposes the service catalog and the key value store and can change them.",
89
"needs": [],

‎app/core/dast_checks/curated/access-control-couchdb-open.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"class": "access-control",
44
"safety": "read",
55
"severity_floor": "high",
6+
"anonymous": true,
67
"title": "CouchDB is reachable without signing in",
78
"summary": "The CouchDB HTTP API answers unauthenticated at the root, a direct path to the stored data.",
89
"needs": [],

‎app/core/dast_checks/curated/access-control-docker-api-open.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"class": "access-control",
44
"safety": "read",
55
"severity_floor": "critical",
6+
"anonymous": true,
67
"title": "The Docker engine API is reachable",
78
"summary": "The Docker remote API answers unauthenticated, which is control of the host: an attacker can start a container that mounts the disk.",
89
"needs": [],

‎app/core/dast_checks/curated/access-control-docker-registry-open.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"class": "access-control",
44
"safety": "read",
55
"severity_floor": "high",
6+
"anonymous": true,
67
"title": "A Docker registry is reachable without signing in",
78
"summary": "The Docker registry v2 API answers unauthenticated, which lets an attacker list, pull and push the container images.",
89
"needs": [],

‎app/core/dast_checks/curated/access-control-druid-console.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"class": "access-control",
44
"safety": "read",
55
"severity_floor": "medium",
6+
"anonymous": true,
67
"title": "An Apache Druid console is exposed",
78
"summary": "The Apache Druid console answers here without signing in, which lets its data and queries be reached.",
89
"needs": [],

0 commit comments

Comments
 (0)