Skip to content

Security: shoemoney/commander-in-chief

SECURITY.md

๐Ÿ›ก๏ธ Security Policy

Commander In Chief is an offline single-player / local-co-op Godot game. There are no servers, no accounts, no telemetry, and no shipped network play โ€” the attack surface is roughly the size of a grenade pin. ๐Ÿซฃ We still take that pin seriously. If you find a way to make this game do something it shouldn't, we want to hear about it.

CI License Godot Release


๐Ÿช– Supported Versions

๐Ÿท๏ธ Version ๐Ÿ“ฆ Status
main branch โœ… Actively maintained โ€” fixes land here first
Latest release (v0.3.x) โœ… Supported โ€” macOS ยท Linux ยท Windows binaries
Anything older (v0.2.x and below) โš ๏ธ Best effort โ€” please reproduce on the latest release before reporting

๐Ÿ” Not sure what you're running? Check the latest release first โ€” half of all "vulnerabilities" in older builds are bugs we already shot dead. ๐Ÿ’€


๐ŸŽฏ In Scope

The honest list of places hostile input can actually reach this game:

๐ŸŽฏ Surface ๐Ÿ“ Where ๐Ÿ’ฃ What we're worried about
Save / config parsing user://ikari_best.cfg (+ .tmp / .bak rotation) via ConfigFile in src/main.gd A crafted save file crashing the game, corrupting the merge path, or smuggling hostile values past the clamping (_cfg_int & friends)
Replay parsing user://last_run.replay via Replay.load_from (src/net/replay.gd, magic IKARI_REPLAY_1) A hand-built replay file that breaks the parser, desyncs validation, or claims a score the recorded inputs can't reproduce
Lockstep desync / checksum logic src/net/lockstep.gd Input-validation or desync-detection flaws. โš ๏ธ This is a design sketch with zero production callers โ€” no shipped build opens a socket. Reports welcome, but the exploit has to live in the logic, not in a network you had to build yourself
Asset pipeline tooling tools/gen_*.py (entities ยท UI chrome ยท icons ยท glyphs ยท FX cards) Code execution or path tricks when a maintainer runs the generators against untrusted input (e.g. a hostile PR)
Export / binary integrity GitHub Releases artifacts (export_presets.cfg, CI export-smoke) Tampered release zips, or a build pipeline weakness. Note: macOS builds are ad-hoc signed, not notarized โ€” that's a known position, not a finding

๐Ÿšซ Out of Scope

๐Ÿšซ Why
๐ŸŒ "Hacking the online multiplayer" There is none shipped. No ENet, no HTTPRequest, no sockets in any shipped runtime path โ€” SteamBridge (src/steam/steam_bridge.gd) no-ops offline because GodotSteam isn't bundled
๐Ÿ‘ค Accounts, servers, PII, telemetry None exist. The game writes a config file and a replay to user:// and that's the whole data footprint
๐ŸŽญ Asset provenance & legal questions The VO likeness position and third-party components live in NOTICE.md and ASSETS.md โ€” that's a licensing conversation, not a security report
๐Ÿ› Plain gameplay bugs Those go in Issues or FINDINGS.md โ€” a crash you cause with a normal controller is a bug, not a vulnerability
๐Ÿ”“ Jailbreak/root-required "attacks" If you already own the machine the game runs on, the save file was always yours to edit

๐Ÿ“ฎ How to Report

๐Ÿฅ‡ Primary ๐Ÿฅˆ Fallback
GitHub Private Vulnerability Reporting โ€” draft a private advisory on this repo ๐Ÿ“ง jeremy@shoemoney.com

Please include: the version/commit you tested, the platform, what you did, what happened, and (if you have one) a crafted ikari_best.cfg / .replay / PoC that reproduces it. Replays and saves attach beautifully to a private advisory. ๐Ÿ“Ž

sequenceDiagram
    autonumber
    actor You as ๐Ÿ•ต๏ธ You
    participant GH as ๐Ÿ“ฎ Private Advisory
    participant M as ๐Ÿง‘โ€โœˆ๏ธ Maintainer
    participant R as ๐Ÿš€ Release

    You->>GH: Report (version, platform, PoC)
    GH->>M: Notification
    M-->>You: Ack within ~72h (target)
    M->>M: Triage: real? in scope? severity?
    alt Confirmed
        M->>M: Fix + regression test
        M->>R: Fix ships in next release
        R-->>You: Credit in release notes (opt-in ๐Ÿ…)
        M->>GH: Public advisory after fix ships
    else Not a security issue
        M-->>You: Explanation + redirect to Issues ๐Ÿ›
    end
Loading

โฑ๏ธ Response Expectations

Honest version: this is a solo-maintainer, best-effort project, not a SOC. ๐Ÿช–

๐Ÿ“Œ Step ๐ŸŽฏ Target ๐Ÿ—’๏ธ Reality check
Acknowledge your report ~72 hours Usually faster; weekends exist
Triage verdict (real / not / needs info) ~1 week Crafted-file PoCs triage fastest
Fix for confirmed issues Next release when possible Severity and blast radius decide; a parser crash beats a theoretical desync
Public advisory After the fix ships Coordinated disclosure, credit opt-in ๐Ÿ…

If the ack window blows past, one polite nudge by email is welcome โ€” silence means life happened, not that your report was ignored. ๐Ÿ’ค


๐Ÿ™ Safe Harbor

Good-faith security research is welcome here. Specifically, we won't come after you for:

  • ๐Ÿ”ฌ Testing against your own install of the game, saves, replays, and tools
  • ๐Ÿงช Fuzzing the ConfigFile / replay parsers as hard as you like
  • ๐Ÿ“ค Reporting through the channels above and giving us a reasonable window before disclosure

In return, please:

  • ๐Ÿšท Don't test against other people's machines or saves
  • ๐Ÿงจ Don't destroy or exfiltrate data that isn't yours (there's barely any here โ€” keep it that way)
  • ๐Ÿคซ Don't public-disclose before the fix has had a fair shot at shipping

โš”๏ธ Found something? Report it, and the War Chest owes you one. โš”๏ธ

Bit-identical everywhere โ€” including the bugs, until you tell us about them. โœจ

There aren't any published security advisories