detecting
Detectability Analysis (LINDDUN D1)
Analyze source code for detectability threats where an observer can determine that a user is interacting with a system, that a record exists, or that a specific action was performed -- even without accessing the content itself. Privacy is compromised when the mere existence of an interaction or record reveals sensitive information.
Supported Flags
Read ../../shared/schemas/flags.md for full flag
documentation. This skill supports all cross-cutting flags.
| Flag | Detectability-Specific Behavior |
|---|---|
--scope |
Default changed. Focuses on files containing API handlers, error responses, presence indicators, and encrypted message handling. |
--depth quick |
Grep patterns only: scan for enumeration endpoints, timing differences, and presence indicators. |
--depth standard |
Full code read, analyze response patterns for information leakage through existence proofs. |
--depth deep |
Trace API response behaviors across endpoints. Map enumeration surfaces and timing oracle opportunities. |
--depth expert |
Deep + adversarial detectability simulation: model what an observer can infer from response patterns and metadata. |
--severity |
Filter output. Severity depends on sensitivity of what can be detected. |
--fix |
Generate constant-time responses, uniform error handling, and padding implementations. |
Framework Context
LINDDUN D1 -- Detectability
Detectability occurs when an adversary can determine that an item of interest
exists, even without accessing its content. Read
../../shared/frameworks/linddun.md for the
full LINDDUN framework reference including detectability patterns, timing
side channels, and traffic analysis threats.
Privacy Property Violated: Undetectability / Unobservability
STRIDE Mapping: Information Disclosure (detectability focuses on existence proofs and metadata patterns rather than direct content access)
Workflow
Step 1 -- Determine Scope
- Parse
--scopeflag (default:changed). - Resolve to a concrete file list.
- Filter to relevant files: API handlers, error handling middleware, presence or status indicators, encrypted message handling, notification systems, and cache management.
- Prioritize files containing: HTTP error responses, user existence checks, online status indicators, read receipts, and response timing logic.
Step 2 -- Analyze for Detectability Patterns
Read each scoped file and assess what an observer can detect about system usage or data existence:
- Check error response uniformity: Determine whether different error codes or messages reveal record existence (e.g., "user not found" vs. "wrong password").
- Assess timing consistency: Look for code paths where response time differs based on record existence (cache hit vs. database miss).
- Examine presence indicators: Find online status, typing indicators, read receipts, or activity signals that lack opt-out mechanisms.
- Check message padding: Determine whether encrypted messages have uniform size or leak content type through size variation.
- Evaluate enumeration surfaces: Identify endpoints that allow probing for existence of users, records, or resources.
At --depth deep or --depth expert, model the full observable surface and
determine what an adversary can infer from response patterns and metadata.
Step 3 -- Report Findings
Output findings per ../../shared/schemas/findings.md.
Each finding needs: DTCT-NNN id, title, severity (based on sensitivity of
detectable information and ease of observation), location with snippet, description
of what can be detected and through which channel, impact (what an observer infers),
fix (uniform responses, constant-time ops, or padding), and CWE/LINDDUN references.
Analysis Checklist
- Do error responses differentiate "not found" from "access denied" for user lookups?
- Can an observer enumerate valid usernames, emails, or account IDs?
- Do response times vary based on whether a record exists (timing oracle)?
- Are there presence indicators or read receipts without opt-out?
- Do encrypted messages vary in size, revealing content type or length?
- Can push notification patterns reveal when a user receives messages?
- Do API rate limit responses differ for authenticated vs. non-existing users?
- Can traffic analysis reveal which features or services a user accesses?
What to Look For
- User enumeration via error messages: Different responses for existing vs. non-existing accounts.
- Grep:
user not found|invalid username|no such user|email not registered|account does not exist
- Grep:
- Timing oracles: Early-return patterns that reveal record existence.
- Grep:
if.*!user.*return|if.*notFound.*return|findOne.*then.*404|catch.*404
- Grep:
- Presence and activity indicators: Online status, typing, and read receipt systems.
- Grep:
isOnline|online_status|lastSeen|last_active|typing.*indicator|read.*receipt|seen.*at
- Grep:
- Account enumeration endpoints: Registration, password reset, or login that reveal existence.
- Grep:
already registered|email.*taken|username.*exists|account.*already|duplicate.*email
- Grep:
- Unpadded encrypted content: Variable-length encrypted messages.
- Grep:
encrypt\(|cipher\.update|AES.*encrypt|padding|PKCS|NoPadding
- Grep:
- Observable API patterns: Sequential IDs or predictable resource identifiers.
- Grep:
autoIncrement|SERIAL|sequence|nextval|uuid.*v1|ObjectId
- Grep:
- Notification metadata leakage: Push notification patterns revealing user behavior.
- Grep:
sendNotification|pushNotif|FCM|APNs|webpush|notify\(.*user
- Grep:
Regulatory Mapping
| Regulation | Provision | Relevance |
|---|---|---|
| GDPR Art. 25 | Data protection by design | Systems must prevent unauthorized detection of data existence |
| GDPR Art. 32 | Security of processing | Includes protection against unauthorized disclosure via side channels |
| CCPA 1798.150 | Private right of action | Unauthorized access including inference from observable patterns |
| HIPAA 164.312(e) | Transmission security | Health record existence must not be detectable |
| ePrivacy Directive Art. 5 | Confidentiality of communications | Communication metadata must be protected |
Output Format
Use finding ID prefix DTCT (e.g., DTCT-001, DTCT-002).
All findings follow the schema in
../../shared/schemas/findings.md with:
references.cwe:CWE-203(Observable Discrepancy) orCWE-208(Observable Timing Discrepancy)references.owasp:A05:2021(Security Misconfiguration -- information leakage in responses)metadata.tool:"detecting"metadata.framework:"linddun"metadata.category:"D1"
Summary table after all findings:
| Detectability Pattern | Critical | High | Medium | Low |
|-----------------------------|----------|------|--------|-----|
| User enumeration | | | | |
| Timing side channels | | | | |
| Presence indicators | | | | |
| Account enumeration | | | | |
| Message size leakage | | | | |
| Notification patterns | | | | |
Followed by: top 3 priorities, enumeration surface map, and overall assessment.