Skip to content

security: assail-classifications for 8/9 panic-attack #378 findings + delete unfilled flake.nix scaffold#405

Merged
hyperpolymath merged 2 commits into
mainfrom
security/378-triage
May 27, 2026
Merged

security: assail-classifications for 8/9 panic-attack #378 findings + delete unfilled flake.nix scaffold#405
hyperpolymath merged 2 commits into
mainfrom
security/378-triage

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

Orphan branch surfaced during 2026-05-27 estate sweep — 2 commits ahead of main, no PR ever filed. Adds security audit classifications.

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

hyperpolymath and others added 2 commits May 26, 2026 17:37
…findings

panic-attack estate sweep flagged 9 Critical/High findings in this
repo (issue #378). After per-finding triage, 8 of 9 are false
positives or vendored-subtree concerns. The remaining 1
(affinescriptiser/flake.nix) was an unfilled scaffold leftover with
{{PROJECT_NAME}} placeholders — deleted in the next commit rather
than suppressed.

Classifications added:

UnboundedAllocation (4 sites) — all `std::fs::read_to_string` calls
reading local user-authored TOML config/manifest/lockfile/source-file
paths. Trust model is identical to rustc/cargo: the user is the
operator; an attacker who can write multi-GB files to the user's
~/.config/ is already past the security boundary. Sites:
  - affinescriptiser/src/codegen/parser.rs (source path)
  - tools/affine-pkg/src/lockfile.rs (lockfile)
  - tools/affine-pkg/src/manifest.rs (manifest)
  - tools/affine-pkg/src/config.rs (global + project config)

DynamicCodeExecution (2 sites):
  - tools/affine-doc/assets/search.js — pattern-matched a COMMENT
    explaining the code AVOIDS innerHTML. Render path uses
    .textContent throughout. Confirmed by reading the file.
  - road-skate/game/main.js — vendored subtree; fix in upstream
    hyperpolymath/road-skate, not this tree.

SupplyChain (2 sites):
  - road-skate/flake.nix — vendored subtree.
  - affinescript-vite/flake.nix — vendored subtree.

Schema cribbed from hyperpolymath/echidna/audits/assail-classifications.a2ml.

Refs #378
Refs hyperpolymath/panic-attack#32

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The file had {{PROJECT_NAME}}, {{CURRENT_YEAR}}, {{AUTHOR}}, etc.
placeholders throughout — never instantiated from the project-scaffold
template. As-is it isn't a usable Nix flake (nix can't parse the
placeholders).

Not referenced by any tool: `grep -rln "affinescriptiser/flake"`
across .sh / .yml / .adoc / .md / .toml / .just returns empty. No
parent flake.nix at the affinescript root either (this is an OCaml +
AffineScript primary repo; Nix is fallback only at the sub-package
level, and the parent has guix.scm as the primary dev env).

Deleting honestly disposes of the unfilled template rather than
suppressing the panic-attack SupplyChain finding (unpinned inputs)
which is technically correct but moot for an un-parseable file. If
affinescriptiser ever needs a real flake.nix later, instantiate from
a fresh template with real values + input pinning + flake.lock.

This is the third commit of the #378 triage (one suppression file +
this delete; the other 8 findings are FPs covered in the suppression
file).

Refs #378

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath hyperpolymath merged commit 55bc660 into main May 27, 2026
13 of 22 checks passed
@hyperpolymath hyperpolymath deleted the security/378-triage branch May 27, 2026 13:26
@github-actions
Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 56 issues detected

Severity Count
🔴 Critical 4
🟠 High 11
🟡 Medium 41

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Action actions/checkout@v6 needs attention",
    "type": "unpinned_action",
    "file": "publish-jsr.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Action denoland/setup-deno@v2 needs attention",
    "type": "unpinned_action",
    "file": "publish-jsr.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in affine-vscode-publish.yml",
    "type": "unknown",
    "file": "affine-vscode-publish.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in casket-pages.yml",
    "type": "unknown",
    "file": "casket-pages.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in casket-pages.yml",
    "type": "unknown",
    "file": "casket-pages.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in ci.yml",
    "type": "unknown",
    "file": "ci.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in ci.yml",
    "type": "unknown",
    "file": "ci.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in ci.yml",
    "type": "unknown",
    "file": "ci.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in ci.yml",
    "type": "unknown",
    "file": "ci.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in ci.yml",
    "type": "unknown",
    "file": "ci.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant