본문으로 건너뛰기
cccskills
무료GitHub에 공개

security-hard-exclusions-and-precedents

Use when a candidate finding falls into a noisy category - the do-not-report list, the precedents that settle recurring edge cases, and the narrow exceptions where an excluded category still counts

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구Firebase
설치 방법 보기

포함된 파일(1)

  • SKILL.md8.8 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Hard Exclusions and Precedents

Overview

Some categories produce far more noise than signal in a diff review, or are handled by another process. They are excluded up front so you never spend a finding — or a developer's revision — on them. Precedents settle the cases that come up every week, so two reviews of the same pattern reach the same answer.

Core principle: an exclusion is not a judgement that the issue is harmless; it is a judgement that this review is the wrong place for it.

1. Never Report

Availability and load

  • Denial of service, resource exhaustion, memory or CPU blow-up, missing rate limiting, unbounded loops — except the narrow single-input cases in §4.
  • Regex injection and ReDoS.

Hardening without a vulnerability

  • Missing security headers, HSTS advice, TLS/HTTPS in local development, "should use a stronger setting" with no concrete attack.
  • Missing input validation on a field that has no security effect.
  • Missing audit logs; log spoofing / log injection.

Out of this review's scope

  • Outdated libraries in general — dependency risk is judged by supply-chain-and-dependency-review, version by version.
  • Memory-safety issues in memory-safe languages (Go, Java, Kotlin, C#, Rust safe code, Python, JS). Native code, unsafe blocks, cgo and FFI are in scope (native-memory-safety-and-ffi).
  • Anything only in test files, fixtures, examples or documentation (Markdown, comments).
  • Theoretical race conditions and timing issues without a demonstrated window and impact. A check-then-act race the attacker drives with two concurrent requests, for money, quota, a unique claim or a privilege, is not theoretical (business-logic-and-state-abuse §2).
  • Secrets stored on disk with otherwise appropriate protection (a mounted secret file, an OS keychain).
  • Pre-existing issues the diff did not introduce or enable.

Usually noise — only at very high confidence

  • Open redirect, tabnabbing, XS-Leaks, prototype pollution: report only with a concrete chain to real impact (token theft via redirect in an OAuth flow, pollution reaching an auth decision or a child_process option).

2. Precedents

SituationRuling
Logging a secret, token, password or session idVulnerability (CWE-532)
Logging a URLFine — unless the URL carries a token or credential in the query
UUIDv4 ids in URLsUnguessable; enumeration is not the attack — the missing ownership check is
Values from environment variables, CLI flags, server config filesTrusted input
ORM query builders, parameterised SQLSafe; raw/text()/string-built SQL is not
React, Vue, Angular, Svelte templatesSafe by default; only dangerouslySetInnerHTML, v-html, {@html}, bypassSecurityTrust*, direct DOM sinks count
Missing permission check in client-side JS/TS or a mobile UINot a finding — the server is the boundary; check the server
SSRF or path traversal in browser codeNot a finding — the browser is the attacker's own machine
SSRF where the attacker controls only the path, not host or schemeNot reported
Shell scripts and .ipynb notebooksInjection only with a specific untrusted-input path into them
GitHub Actions inputsOnly when an untrusted event (fork PR, issue, comment) can trigger them; workflow_dispatch inputs come from people with write access
Resource leaks (unclosed files, connections)Bugs, not vulnerabilities
Crashes, panics, 500sBugs, unless the error path itself leaks data or fails open
Hard-coded non-secret config (project ids, hostnames, public client ids)Fine
Dev fallback such as os.environ.get("SECRET_KEY", "dev")Fine — unless production demonstrably runs without the variable set
Publishable keys (Stripe pk_, Firebase web config, analytics write keys)Fine by design
Secret in a test fixtureExcluded when it is a dummy or a documented test key; a real production credential pasted into a test is still a live secret
"Internal" service, private network, "only other services call it"Not authentication. Judge by who can reach it; if that is decided outside the repository, it is a needs-validation note
JSON Schema, protobuf, zod, Pydantic or a typed DTO on the inputProves shape, not authority, provenance or safe values
A tenant_id / owner_id column on the recordNot isolation until a query, policy or key on this path enforces it
A secret reference (vault path, env var name, secret ARN, key id)Not a disclosed secret
Missing cookie flags, missing MFA prompt, missing least privilege, missing pinningHardening, unless a concrete path uses the gap
A user installing a plugin, extension or script into their own appNot a boundary
A file, token or config readable only by the same OS userNot a finding — the attacker is the victim
Different responses that reveal whether a public account existsNot a finding; an oracle on a protected predicate (another tenant's record, a hidden field's value) is
Access-Control-Allow-Origin: * together with credentialsBrowsers refuse it — the finding shape is a reflected or loosely matched origin with credentials
A system prompt or guardrail instructionNot a control; tool permissions, scoping and approval are

3. The Rule That Was Replaced

The upstream list excluded "user content in an AI system prompt". This agent does not keep that exclusion. Prompt injection IS a finding when the model that reads untrusted content also holds privileged tools, private data or an outbound channel: then the model is the attacker's instrument and the user or the organisation is the victim (llm-and-agent-security). Untrusted text reaching a model that can do nothing but answer the same user is still not a finding.

4. Where an Exclusion Stops

  • Test files excluded — but a diff that changes production behaviour behind a test-only flag reachable in production (if os.getenv("TEST_MODE") disabling auth) is production code.

  • Documentation excluded — but an agent instruction file (CLAUDE.md, AGENTS.md, .cursorrules, a prompt template) is configuration an LLM executes; a hidden instruction or a permission change there is in scope.

  • Hardening excluded — but removing an existing control (deleting CSRF middleware, setting verify=False, dropping HttpOnly) is a removed guard, judged by its concrete impact.

  • Availability excluded — but one bounded input (not sustained volume) is in scope when the effect is persistent, amplified onto everyone, or spends operator money without limit:

    • a poisoned cache entry, or a persisted record or message that crashes every reader or blocks a shared queue partition until someone removes it by hand — integrity loss as much as availability;
    • a decompression, archive or image bomb expanded before any size check, on a shared worker, by an unauthenticated or low-trust sender;
    • a panic outside the request goroutine (Go's net/http recovers only the handler's own) or an unhandled rejection that kills the shared process, reachable from one request;
    • an untrusted trigger — an issue, an inbound email, a webhook, a public form — that starts work looping or fanning out paid API or model calls with no per-request budget, cap or cancellation.

    Write the input-to-cost path: the input, the work it triggers, the missing bound, who else is affected, and how the system recovers. MEDIUM by default; HIGH when unauthenticated and persistent. A missing rate limit, a slow endpoint or "many requests could…" stays excluded.

Common Mistakes

  • Reporting "no rate limit on login" — excluded; brute force is handled outside this review.
  • Reporting pk_live_ or a Firebase web apiKey as a leaked secret.
  • Reporting a stack trace on a 500 as data exposure when it contains no secret, path or query.
  • Flagging {userInput} in JSX as XSS.
  • Dropping a prompt-injection finding because "user content in prompts is excluded" while the model can call run_shell.
  • Using the availability exception for anything that needs sustained volume to hurt.

Red Flags

  • A comment full of excluded categories padding one real finding — cut them.
  • An exclusion used to wave away a removed guard.
  • A "test" helper imported from production code paths.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1182026년 10월 21일 업데이트

Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1182026년 10월 21일 업데이트

Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1182026년 10월 21일 업데이트

Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1182026년 10월 21일 업데이트

How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1182026년 10월 21일 업데이트

Use when the repository keeps its alerting in code, or a person asks for alerts outside TaskTrooper - PrometheusRule YAML, a Cloud Monitoring alert policy in Terraform, a Datadog monitor, each routed to TaskTrooper's alert ingest URL so it opens an incident here

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1182026년 10월 21일 업데이트

makifbaysal의 스킬 모두 보기

이 스킬의 문제 신고