Skip to content

Fill sinks where threat-model fires but sinks comes back empty #30

@andrew

Description

@andrew

Some tools carry taxonomy that fires threat mappings but have no [[security.sinks]], so brief threat-model says "this is dangerous" while brief sinks says nothing to grep for.

  • node/adonisjs.toml — carries function:data-mapping, function:templating, function:authentication, layer:backend. Bundles Lucid ORM (Database.rawQuery, query().whereRaw), Edge templates ({{{ }}} triple-stash, @!section raw), and auth (auth.use().login). Same shape as Django/Laravel which both got sinks in Seed sinks for web frameworks and ORMs #27.
  • node/astro.tomlfunction:templating, does SSR. set:html directive bypasses escaping, Astro.redirect.
  • node/qwik.tomlfunction:templating. dangerouslySetInnerHTML equivalent.
  • node/solidjs.tomlfunction:templating. innerHTML prop, Dynamic component with caller-controlled tag.
  • node/ember.tomlfunction:templating. {{{triple-stash}}} in Handlebars templates, htmlSafe.
  • node/eleventy.tomlfunction:templating. SSG so build-time only, but supports multiple template engines whose unescaped forms apply.
  • node/gatsby.tomlfunction:templating. dangerouslySetInnerHTML (it's React underneath), GraphQL query injection if queries built from URL params.

The SSGs (Eleventy, Gatsby) are lower priority since they're build-time and the attacker would need to control source files. Astro and Qwik do server rendering so they're closer to the backend frameworks.

go/chi.toml also carries layer:backend + role:library but it's a bare router with no response helpers — sinks come from net/http which is already on go/language.toml. Probably correct to leave it empty.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions