Skip to main content

assemble-lib-rules

Connect the shared untrusted-data source group to new reusable OpenTaint sink groups. Use to wire new sink tags into security joins

Source facts

Repository
seqra/opentaint
Last source activity
September 11, 2026 at 20:01
Detected SKILL.md language
English
Stars
163
Forks
12

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
assemble-lib-rules
description
Connect the shared untrusted-data source group to new reusable OpenTaint sink groups. Use to wire new sink tags into security joins
license
Apache-2.0
metadata
{"author":"opentaint","version":"0.3.0"}
# Skill: Assemble Lib Rules Reusable source rules share the single `untrusted-data-source` tag. Write only the security joins that connect it to sink tags reported as uncovered by `get_status.py`. An existing join automatically includes every new library rule carrying either tag. The main scan verifies the joins. ## Inputs Provided by the caller, fall back to the default value when omitted. Ask back only when a required input is missing and has no sensible default - `project-root` (optional) — root of the target project. Opentaint keeps all analysis artifacts under the fixed `<project-root>/.opentaint/` directory, so every `.opentaint/...` path below resolves there. Default: current directory - `language` (required) — target language for this project and language-specific instructions ## Workflow ### 1. Get the missing sink tags The orchestrator dispatches this skill only when `get_status.py` reports uncovered joins. Use that output as the complete worklist: each `untrusted-data-source -> sink-tag` line under `reusable tag groups are not fully joined` names one sink tag to connect. The script has already accounted for active built-in and custom library rules and for existing joins. Do not read those rules or recompute the matrix yourself. ### 2. Write one security join per missing sink tag For each missing sink tag, write one `join` rule under `.opentaint/rules/<lang>/security/<vulnerability>.yaml`. Use the sink tag without its final `-sink` as the concise, globally unique `<vulnerability>` id — for example, `regex-dos-sink` becomes `regex-dos`. Reference the shared source tag and reported sink tag directly: ```yaml rules: - id: regex-dos severity: ERROR message: Untrusted data reaches a regular-expression denial-of-service sink metadata: cwe: - CWE-1333 short-description: Regular expression denial of service via untrusted input languages: - <language> mode: join join: refs: - tag: untrusted-data-source as: source - tag: regex-dos-sink as: sink on: - 'source.$UNTRUSTED -> sink.$UNTRUSTED' ``` Both endpoints use `$UNTRUSTED`. Sink tags and join ids name vulnerability classes, not packages, frameworks, or individual methods: a newly created rule for an existing vulnerability class reuses that class's sink tag and therefore needs no new join. Derive accurate security metadata from the sink tag. ### 3. Verify the matrix, then stop Run `get_status.py` again. If it still reports an assigned sink tag, fix that join and repeat. Finish when every reusable sink tag is connected to `untrusted-data-source`. ## Output ### Artifacts - one security join file per missing sink tag at `.opentaint/rules/<lang>/security/<vulnerability>.yaml` ### Summary - one line per join: sink tag and rule id ## Gotchas - Reference the reported sink tag directly, never re-declare or enumerate either tag group's lib-rule members - Keep produced joins comment-free
View on GitHub