Skip to content
Back to skills

Race Condition

ASecurity

Detects check-then-act sequences on shared state vulnerable to TOCTOU

  • 20 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 9, 2026
securityapidatabasesecurity

Works with

  • api

Security analysis

A100/100

Scanned September 9, 2026

npx -y skills add thejefflarson/soundcheck --skill race-condition --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Race Condition?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Race Condition
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thejefflarson-race-condition/badge)](https://www.skillsdirectory.com/skills/thejefflarson-race-condition)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: race-condition
description: Detects check-then-act sequences on shared state vulnerable to TOCTOU
  manipulation. Use when writing check-then-act sequences on shared state,
  file operations that check existence before read/write, balance updates
  without locking, or any code where two operations on the same resource are
  not atomic.
---

# Race Condition Security Check (CWE-362)

## What this checks

Protects against time-of-check-to-time-of-use (TOCTOU) and other race conditions where
concurrent access to shared state creates a window for attackers to manipulate data
between a check and its corresponding action. Exploitation leads to privilege escalation,
double-spend, and data corruption.

## Vulnerable patterns

- File existence checked before opening, deleting, or creating — the file can be swapped between the check and the operation.
- Balance, quota, or counter read into memory, modified, then written back without locking or a transaction — concurrent updates lose writes or double-spend.
- "Does this username exist? if not, create it" with no database-level uniqueness constraint — two concurrent callers both see "no" and both create.
- Privilege or ownership checked in one call, then a separate later call performs the action on the same resource — the resource may have changed between calls.

## Fix immediately

Flag the vulnerable code and explain the risk. Then suggest a fix that establishes
these properties. Translate each property into the audited file's language,
database driver, and filesystem API — use the platform's documented atomic
primitives.

1. **No check-then-act sequence on shared state runs without atomicity.** The
   check and the act collapse into a single atomic operation, or both sit
   inside a lock, transaction, or database-level guard. A read followed by a
   separate write is the exact bug — merge them into a conditional update that
   returns the affected row count.
2. **Balance, counter, and quota updates use atomic increments or
   compare-and-swap** — never a read-modify-write sequence in application
   code. Under concurrency the read-modify-write loses every interleaved
   update; the database or atomic type is the correct place for the mutation.
3. **File operations that depend on existence use atomic primitives** —
   exclusive-create flags, atomic rename, atomic link. A separate exists check
   followed by an open is TOCTOU-exploitable; the atomic flag short-circuits
   the window.
4. **Uniqueness constraints live in the database, not in application code.**
   An "exists then create" pattern races two ways with itself; a uniqueness
   index plus an insert-and-catch-duplicate pattern is race-free by
   construction.

## Verification

- [ ] No check-then-act sequence on shared state (files, database rows, in-memory counters) operates without atomicity — either a single atomic operation, a lock, or a database-level guard
- [ ] Balance/counter updates use atomic increments or compare-and-swap, not read-modify-write sequences
- [ ] File operations that depend on existence or state use atomic primitives (exclusive-create, atomic rename, atomic link) rather than check-then-act
- [ ] Uniqueness is enforced by a database constraint, not by an application-level exists-then-create pattern

## References

- CWE-362 ([Concurrent Execution Using Shared Resource with Improper Synchronization](https://cwe.mitre.org/data/definitions/362.html))
- CWE-367 ([TOCTOU Race Condition](https://cwe.mitre.org/data/definitions/367.html))

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.