Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions skills/clawsec-suite/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,17 @@ All notable changes to the ClawSec Suite will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.1.4]

### Added

- Audit warning when `CLAWSEC_VERIFY_CHECKSUM_MANIFEST=0` is enabled in `guarded_skill_install.mjs` to match visibility pattern of `CLAWSEC_ALLOW_UNSIGNED_FEED` bypass.
- Audit warning when `CLAWSEC_VERIFY_CHECKSUM_MANIFEST=0` is enabled in `handler.ts` with once-only flag pattern to prevent repeated warnings.

### Security

- Enhanced visibility for checksum verification bypass: operators are now immediately notified when the checksum manifest verification layer is disabled, following the fail-open visibility principle.

## [0.1.3]

### Added
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const DEFAULT_FEED_URL =
"https://clawsec.prompt.security/advisories/feed.json";
const DEFAULT_SCAN_INTERVAL_SECONDS = 300;
let unsignedModeWarningShown = false;
let checksumBypassWarningShown = false;

function parsePositiveInteger(value: string | undefined, fallback: number): number {
const parsed = Number.parseInt(String(value ?? ""), 10);
Expand Down Expand Up @@ -160,6 +161,14 @@ const handler = async (event: HookEvent): Promise<void> => {
);
}

if (!verifyChecksumManifest && !checksumBypassWarningShown) {
checksumBypassWarningShown = true;
console.warn(
"[clawsec-advisory-guardian] CLAWSEC_VERIFY_CHECKSUM_MANIFEST=0 is enabled. " +
"This disables checksum verification and should be used with caution.",
);
}

const forceScan = toEventName(event) === "command:new";
const state = await loadState(stateFile);
if (!forceScan && scannedRecently(state.last_hook_scan, scanIntervalSeconds)) {
Expand Down
6 changes: 6 additions & 0 deletions skills/clawsec-suite/scripts/guarded_skill_install.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@ async function loadFeed() {
);
}

if (!verifyChecksumManifest) {
process.stderr.write(
"WARNING: CLAWSEC_VERIFY_CHECKSUM_MANIFEST=0 is enabled. Checksum verification for the advisory feed manifest is disabled. This reduces security guarantees.\n",
);
Comment on lines +149 to +152
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CLAWSEC_VERIFY_CHECKSUM_MANIFEST=0 bypass warning is implemented twice: the same env var check and warning text exist at lines 149‑152 here and at lines 163‑170 of hooks/clawsec-advisory-guardian/handler.ts. Can we extract a shared helper in skills/clawsec-suite (e.g. lib/env-warnings or similar) so both the hook and the install script reuse the same once-per-process guard and message instead of duplicating the logic?

Finding type: Code Dedup and Conventions


Want Baz to fix this for you? Activate Fixer

}

const publicKeyPem = allowUnsigned ? "" : await fs.readFile(feedPublicKeyPath, "utf8");

const remoteFeed = await loadRemoteFeed(feedUrl, {
Expand Down
2 changes: 1 addition & 1 deletion skills/clawsec-suite/skill.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "clawsec-suite",
"version": "0.1.3",
"version": "0.1.4",
"description": "ClawSec suite manager with embedded advisory-feed monitoring, cryptographic signature verification, approval-gated malicious-skill response, and guided setup for additional security skills.",
"author": "prompt-security",
"license": "AGPL-3.0-or-later",
Expand Down