Skip to content

Dependency detection misses workspace member manifests #40

@andrew

Description

@andrew

Running `brief threat-model` on workspace projects (Cargo workspaces, Go workspaces) returns fewer threats than expected because dependency detection only parses root-level manifests, not workspace member manifests.

Found this testing against real projects:

zizmor (Rust) — `reqwest` is in `crates/zizmor/Cargo.toml` but the root `Cargo.toml` only has `[workspace]` with no `[dependencies]`. brief detects Rust and Cargo workspaces but doesn't find reqwest, so the `rust/reqwest.toml` tool def never matches and the SSRF threat doesn't fire.

syft (Go) — similar pattern. Go workspace with nested `go.mod` files in subdirectories. Dependencies in member modules aren't found.

forgejo (Go) — pgx was detected (maybe because it's in the root go.mod?) but other deps in nested modules may be missed.

The fix would be: when a workspace is detected (Cargo workspace, Go workspace, pnpm/yarn/npm workspaces), also parse member manifests. The workspace detection already identifies the root — the member paths are in `[workspace] members = [...]}` for Cargo, `use` directives in `go.work`, and `workspaces` in `package.json`.

This affects all the new security-relevant library defs from #28 since they're detected purely via the `dependencies` primitive. A Django project in a monorepo with `pyproject.toml` in a subdirectory would have the same problem.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions