From appsec
This skill should be used when the user asks to "check for repudiation", "analyze audit logging", "find logging gaps", or mentions "repudiation" or "non-repudiation" in a security context. Maps to STRIDE category R.
npx claudepluginhub florianbuetow/claude-code --plugin appsecThis skill uses the workspace's default tool permissions.
Analyze source code for repudiation threats where users can deny having performed actions due to insufficient logging and evidence. Maps to **STRIDE R** -- violations of the **Non-repudiation** security property.
Acquire memory dumps from live systems/VMs and analyze with Volatility 3 for processes, networks, DLLs, injections in incident response or malware hunts.
Provides x86-64/ARM disassembly patterns, calling conventions, control flow recognition for static analysis of executables and compiled binaries.
Identifies anti-debugging checks like IsDebuggerPresent, NtQueryInformationProcess in Windows binaries; suggests bypasses via patches/hooks/scripts for malware analysis, CTFs, authorized RE.
Analyze source code for repudiation threats where users can deny having performed actions due to insufficient logging and evidence. Maps to STRIDE R -- violations of the Non-repudiation security property.
Read ../../shared/schemas/flags.md for the full flag specification. This skill supports all cross-cutting flags including --scope, --depth, --severity, --format, --fix, --quiet, and --explain.
Read ../../shared/frameworks/stride.md, specifically the R - Repudiation section, for the threat model backing this analysis. Key concerns: missing audit logs, log tampering, log injection, insufficient logging detail, log deletion.
Parse flags and resolve the target file list per the flags spec. Prioritize files containing security-critical operations:
For each in-scope file, apply the Analysis Checklist below. At --depth standard, check each file for logging around critical actions. At --depth deep, trace the full lifecycle of security events to confirm they are captured end-to-end with sufficient detail, and verify log shipping and tamper protection.
Output findings per ../../shared/schemas/findings.md using the REPUD ID prefix (e.g., REPUD-001). Set references.stride to "R" on every finding.
Work through these questions against the scoped code. Each "yes" may produce a finding.
after_save, post_save) that should emit audit events but are absent.log.info, logger.warn calls near critical operations and check if user context is passed as structured metadata.logger.info(f"User {username}") without sanitization.chattr +a), write-once storage, or external forwarding to a SIEM/log aggregator.catch blocks, 403/401 responses, and validation rejection paths that silently discard the event without recording what was attempted and by whom."action completed" entries without context are a forensic gap.logrotate, maxFiles, maxSize) and whether retention aligns with compliance requirements.createUser logs but deleteUser does not, or if admin actions are logged but equivalent API actions are not. Look for asymmetric coverage across related handlers.low.Concrete code patterns and grep heuristics to surface repudiation risks:
login, authenticate, signIn, register, resetPassword, changePassword that do not contain calls to log, logger, audit, emit, or track. Grep: (login|signIn|authenticate|register) then verify adjacent logging.save(), .create(, .update(, .delete(, INSERT, UPDATE, DELETE) in handlers with no adjacent logging call within 5-10 lines. Grep: \.(save|create|update|delete|destroy)\( and check surrounding context.logger.info(f"User {username}"), console.log(req.body), log.info("Query: " + userInput) -- any pattern where unsanitized input flows into log formatting. Grep: log\w*\.(info|warn|error|debug)\(.*req\.(body|params|query|headers).except Exception: pass, catch (e) {}, catch (e) { return; }, .catch(() => {}) -- error handlers with no logging. Grep: catch.*\{\s*\}|except.*:\s*pass.file://, ./logs/, or stdout without forwarding. Absence of log shipping libraries (winston-transport, fluent-logger, logstash, sentry, @google-cloud/logging)."record updated" without capturing the previous and new state. Check for absence of old_value, previous, before, diff in log payloads near update handlers.requestId, correlationId, traceId, x-request-id in logging middleware.Each finding must conform to ../../shared/schemas/findings.md.
id: REPUD-<NNN>
severity: critical | high | medium | low
confidence: high | medium | low
location: file, line, function, snippet
description: What the repudiation risk is and what actions can be denied
impact: What accountability is lost and what forensic gaps result
fix: Concrete remediation with diff when possible
references:
stride: "R"
cwe: CWE-778 (Insufficient Logging), CWE-117 (Log Injection), or relevant CWE
metadata:
tool: repudiation
framework: stride
category: R
| Severity | Criteria |
|---|---|
critical | No audit logging on financial transactions or authentication events, log injection enabling forged audit entries |
high | Missing logging on data modification endpoints, log files writable/deletable by application without tamper protection |
medium | Insufficient detail in audit logs (missing actor/resource IDs), swallowed exceptions on security-relevant paths |
low | Local-only log storage without forwarding, missing before/after values on low-impact updates, no request correlation IDs |
| CWE | Description |
|---|---|
| CWE-778 | Insufficient Logging |
| CWE-117 | Improper Output Neutralization for Logs (Log Injection) |
| CWE-223 | Omission of Security-Relevant Information |
| CWE-532 | Insertion of Sensitive Info into Log File |
| CWE-779 | Logging of Excessive Data |
| CWE-770 | Allocation of Resources Without Limits (log storage) |
| CWE-393 | Return of Wrong Status Code (masking failures) |