Compétences brewpage-publish Historique des audits
📦

Historique des audits

brewpage-publish - 9 audits

Comparaison des versions

Évolution des capacités et des constats entre les versions auditées, les plus récentes en premier.

VersionDateRésultatÉléments à examinerChangement vs précédente
v9 Dernier27 oct. 2026, 05:10 Aucun constat confirmé0Aucun changement de capacité
v8 27 oct. 2026, 04:38 1 confirmé0Aucun changement de capacité
v7 27 oct. 2026, 04:04 1 confirmé0Aucun changement de capacité
v6 26 oct. 2026, 22:31 1 confirmé0Aucun changement de capacité
v5 26 oct. 2026, 20:38 4 confirmé0Variables d’environnement
v4 5 juil. 2026, 18:06 4 confirmé31Aucun changement de capacité
v3 5 juil. 2026, 18:06 4 confirmé31 Variables d’environnement
v2 30 juin 2026, 05:48 3 confirmé0Variables d’environnement
v1 2 juin 2026, 12:56 Aucun constat confirmé3Référence

27 oct. 2026, 05:10

All 272 static alerts reflect documented publishing behavior, defensive checks, or syntax misclassification. No evidence found of unauthorized exfiltration, credential harvesting, hidden execution, or audit-directed prompt injection. Selected content leaves the machine for brewpage.app; unlisted links require passwords for access control.

7
Fichiers analysés
1,436
Lignes analysées
4
Éléments à examiner
0
Faux positifs ignorés

Facteurs de risque

🌐 Accès réseau (14)
⚙️ Commandes externes (50)
📁 Accès au système de fichiers (37)
🔑 Variables d’environnement (6)
Audité par: codex

27 oct. 2026, 04:38

All 264 static alerts are false positives involving documented publishing, literal Markdown, validation rules, or local safeguards. A separate directory-packaging race can upload unintended files if a concurrent writer replaces validated paths with symlinks. No evidence found of prompt injection, intentional credential theft, or concealed upload destinations.

7
Fichiers analysés
1,319
Lignes analysées
5
Éléments à examiner
0
Faux positifs ignorés

Préoccupations de sécurité confirmées (1)

Moyen
Directory Packaging Can Follow Replaced Symlinks
Collection rejects symlinks using lstat, but zip later reopens the selected paths without a stable snapshot. A concurrent writer can replace a selected file or ancestor with a symlink to readable files outside the directory. Archive verification compares names, not source identity, so an unchanged innocuous filename can pass inspection and upload unintended data.
The code separates lstat validation from zip reads and verifies only archive names afterward. Exploitation requires concurrent write access to the source tree.

Facteurs de risque

🌐 Accès réseau (14)
⚙️ Commandes externes (50)
📁 Accès au système de fichiers (33)
🔑 Variables d’environnement (6)
Audité par: codex

27 oct. 2026, 04:04

All 261 static findings are false positives involving documentation, defensive checks, or intended publishing operations. No evidence found of credential theft, encoded payloads, or audit-directed prompt injection. One semantic risk remains: a concurrently modified source ZIP can bypass archive inspection and sensitive-entry confirmation before upload.

7
Fichiers analysés
1,268
Lignes analysées
5
Éléments à examiner
0
Faux positifs ignorés

Préoccupations de sécurité confirmées (1)

Moyen
Archive Validation Is Not Bound to Uploaded Bytes
The supplied ZIP is inspected, then curl reopens its original path for upload. A concurrent writer can replace its contents between steps, bypassing archive checks and sensitive-entry confirmation.
The site-zip branch assigns the original path to archive and passes that path separately to inspection and curl. Exploitation requires concurrent source write access.

Facteurs de risque

🌐 Accès réseau (14)
⚙️ Commandes externes (50)
📁 Accès au système de fichiers (32)
🔑 Variables d’environnement (6)
Audité par: codex

26 oct. 2026, 22:31

All 260 static alerts match documentation, exclusion patterns, intended service endpoints, or defensive local operations. A separate high-severity multipart path injection can upload unintended local files through crafted filenames. No evidence found of prompt injection or deliberate credential exfiltration.

7
Fichiers analysés
1,260
Lignes analysées
5
Éléments à examiner
0
Faux positifs ignorés

Préoccupations de sécurité confirmées (1)

Élevé
Multipart Path Injection Can Upload Unintended Local Files
Upload paths enter curl multipart syntax without filename escaping. A crafted existing path containing commas can select additional readable local files, sending their contents outside the approved source.
A loopback test used an existing comma-containing fixture path and reproduced an additional file upload. Shell quoting does not disable curl multipart parsing.

Facteurs de risque

🌐 Accès réseau (14)
⚙️ Commandes externes (50)
📁 Accès au système de fichiers (32)
🔑 Variables d’environnement (6)
Audité par: codex

26 oct. 2026, 20:38

The static alerts match documentation, defensive exclusions, and expected publishing operations rather than demonstrated malicious behavior. Context review found unsafe history destinations, conflicting token-disclosure instructions, unattended privacy defaults, and unbounded ZIP inspection. No evidence found of deliberate credential theft or encoded executable payloads.

6
Fichiers analysés
1,086
Lignes analysées
8
Éléments à examiner
0
Faux positifs ignorés

Préoccupations de sécurité confirmées (4)

Élevé
Owner-token history follows repository-controlled paths
History writes follow symlinks, and chmod failures are ignored. A crafted checkout can redirect owner tokens outside the intended private history file.
The code checks -f but never rejects symlinked history files or parent directories. Redirection and chmod follow these paths before token append.
Élevé
Recovery guidance conflicts with owner-token confidentiality
The recovery note says "report the new URL and owner token", contradicting the explicit prohibition on conversational token disclosure. Following it could expose management credentials.
Both conflicting instructions appear verbatim in the skill. Exposure depends on agent interpretation; the script does not itself print owner tokens in normal results.
Moyen
Unanswered privacy prompts permit unprotected publication
Missing namespace and password answers default to an unlisted link without authentication. Unattended runs can publish selected content without explicit access-policy approval.
The workflow explicitly treats no answer as permission to use an unlisted namespace and no password. Publication is intended, but privacy consent fails open.
Moyen
Archive integrity checks lack local resource limits
Supplied ZIP files undergo decompression testing before upload without a timeout or expansion cap. A malicious archive can exhaust local CPU or stall inspection.
unzip -tq processes archive contents synchronously with no timeout. maxBuffer limits captured output, not decompression work or expanded bytes.

Facteurs de risque

🌐 Accès réseau (14)
⚙️ Commandes externes (50)
📁 Accès au système de fichiers (28)
🔑 Variables d’environnement (4)
Audité par: codex

5 juil. 2026, 18:06

Most static hits are Markdown formatting, documentation URLs, or protective exclusions rather than executable risk. Real issues remain in the Bash publish blocks, which interpolate user-controlled values before curl or zip execution and persist owner tokens in a workspace file.

3
Fichiers analysés
419
Lignes analysées
38
Éléments à examiner
0
Faux positifs ignorés

Préoccupations de sécurité confirmées (4)

Élevé
Environment file access
> **SECURITY:** The ownerToken MUST NEVER appear in conversation output. The bash blocks below handl
This line describes ownerToken handling and local history storage for deletion tokens. The .env text is protective, but token persistence creates a real sensitive-data risk.
Élevé
Unescaped Shell Placeholder Interpolation
The publish snippets interpolate user-controlled content, paths, namespace, TTL, and entry values into Bash commands before execution. Values containing heredoc delimiters, quotes, or command substitutions can change the generated command.
The Bash snippets place placeholders directly inside heredocs, single-quoted JSON, double-quoted URLs, cd commands, and multipart arguments. Those values come from user input or selected paths.
Élevé
Owner Tokens Persisted In Workspace History
The skill creates .claude/brewpage-history.md and appends owner tokens beside public URLs. These tokens allow deletion of published pages and can be exposed through accidental commits or later file reads.
The file path and echo commands are explicit, and each publish path appends the owner token when present. The skill warns not to print tokens but still stores them locally.
Moyen
Pre-Built ZIP Upload Bypasses Secret Exclusions
Directory uploads exclude common secret and project files, but the ZIP upload path sends the supplied archive as-is. A ZIP containing credentials, source maps, or repository data would be uploaded without the same filtering.
The SKILL.md instructions describe ZIP files as an alternative input and the ZIP publish block uploads archive=@{zip_file_path}. The exclusion list is only shown for the directory auto-zip path.
Éléments d’évaluation des capacités (31)

Il s’agit de capacités locales réelles qui peuvent être attendues pour cette compétence ; elles nécessitent donc un examen, mais ne sont pas comptabilisées comme comportement malveillant confirmé.

Élevé
Ruby/shell backtick execution · 5 occurrences
```bash
This range is an executable Bash publish block, not only Markdown formatting. It performs curl or archive operations using user-selected content and placeholders.
Élevé
Ruby/shell backtick execution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | html |"
This line writes owner tokens into the local history file. The token is not printed, but it is still stored as sensitive data in the workspace.
Élevé
Ruby/shell backtick execution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | json |"
This line writes owner tokens into the local history file. The token is not printed, but it is still stored as sensitive data in the workspace.
Élevé
Ruby/shell backtick execution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | file |"
This line writes owner tokens into the local history file. The token is not printed, but it is still stored as sensitive data in the workspace.
Élevé
Ruby/shell backtick execution · 2 occurrences
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | site ($F
This line writes owner tokens into the local history file. The token is not printed, but it is still stored as sensitive data in the workspace.
Élevé
Shell command substitution
CONTENT=$(cat <<'BREWPAGE_EOF'
User-provided page content is placed inside a shell heredoc before execution. Content containing the delimiter or shell syntax could alter the command block.
Élevé
Shell command substitution
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/html?ns={ns}&ttl={days}&format=markdown" \
The curl command is constructed from user-controlled placeholders and then executed by Bash. This creates command-injection and unintended upload risk.
Élevé
Shell command substitution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | html |"
The command appends owner tokens to a workspace history file. This intentionally stores sensitive deletion tokens at rest.
Élevé
Shell command substitution
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/json?ns={ns}&ttl={days}" \
The JSON publish block inserts original_json inside a shell command. Quotes or shell metacharacters in user JSON can break the intended curl invocation.
Élevé
Shell command substitution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | json |"
The command appends owner tokens to a workspace history file. This intentionally stores sensitive deletion tokens at rest.
Élevé
Shell command substitution
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/files?ns={ns}&ttl={days}" \
A user-controlled path placeholder is inserted into a curl multipart argument. Unescaped shell metacharacters in the final path can alter the command.
Élevé
Shell command substitution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | file |"
The command appends owner tokens to a workspace history file. This intentionally stores sensitive deletion tokens at rest.
Élevé
Shell command substitution · 2 occurrences
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/sites?ns={ns}&ttl={days}&entry={entry}" \
The site upload command uses user-controlled namespace, TTL, entry, and archive values inside a shell command. Without strict validation, those values can affect execution.
Élevé
Shell command substitution · 2 occurrences
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | site ($F
The command appends owner tokens to a workspace history file. This intentionally stores sensitive deletion tokens at rest.
Élevé
Template literal with command substitution · 5 occurrences
```bash
The fenced Bash publish block is intended to be executed and contains user-controlled placeholders plus command substitutions. The block can upload data and may be affected by unescaped input.
Moyen
Hardcoded URL
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/html?ns={ns}&ttl={days}&format=markdown" \
This executable curl POST sends user-selected content to brewpage.app. The behavior is disclosed, but it is still a real external upload path.
Moyen
Hardcoded URL
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/json?ns={ns}&ttl={days}" \
This executable curl POST sends user-selected content to brewpage.app. The behavior is disclosed, but it is still a real external upload path.
Moyen
Hardcoded URL
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/files?ns={ns}&ttl={days}" \
This executable curl POST sends user-selected content to brewpage.app. The behavior is disclosed, but it is still a real external upload path.
Moyen
Hardcoded URL · 2 occurrences
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/sites?ns={ns}&ttl={days}&entry={entry}" \
This executable curl POST sends user-selected content to brewpage.app. The behavior is disclosed, but it is still a real external upload path.

Facteurs de risque

🌐 Accès réseau (14)
⚙️ Commandes externes (103)
SKILL.md:18 SKILL.md:19 SKILL.md:20 SKILL.md:21 SKILL.md:27 SKILL.md:28 SKILL.md:29 SKILL.md:30 SKILL.md:31 SKILL.md:33 SKILL.md:38-41 SKILL.md:41-43 SKILL.md:43 SKILL.md:46 SKILL.md:47 SKILL.md:48-52 SKILL.md:52-58 SKILL.md:58-68 SKILL.md:68-71 SKILL.md:71 SKILL.md:72 SKILL.md:73 SKILL.md:78 SKILL.md:79-80 SKILL.md:80-86 SKILL.md:86-96 SKILL.md:96-99 SKILL.md:99-101 SKILL.md:101-104 SKILL.md:104 SKILL.md:105-106 SKILL.md:106-110 SKILL.md:110 SKILL.md:113-122 SKILL.md:122-123 SKILL.md:123-129 SKILL.md:129-131 SKILL.md:131-134 SKILL.md:134-152 SKILL.md:152-157 SKILL.md:157-160 SKILL.md:160-173 SKILL.md:173-178 SKILL.md:178-181 SKILL.md:181-193 SKILL.md:193-198 SKILL.md:198-201 SKILL.md:201-220 SKILL.md:220-225 SKILL.md:225-228 SKILL.md:228-243 SKILL.md:243-248 SKILL.md:248-252 SKILL.md:252-253 SKILL.md:253-256 SKILL.md:256-258 SKILL.md:258-259 SKILL.md:259-267 SKILL.md:267-271 SKILL.md:271-272 SKILL.md:272-274 SKILL.md:274-278 SKILL.md:278-279 SKILL.md:279 SKILL.md:280 SKILL.md:281-282 SKILL.md:282 SKILL.md:283 SKILL.md:284 SKILL.md:285 SKILL.md:286 SKILL.md:116 SKILL.md:136-139 SKILL.md:140 SKILL.md:143-146 SKILL.md:148 SKILL.md:149 SKILL.md:152 SKILL.md:164-167 SKILL.md:169 SKILL.md:170 SKILL.md:173 SKILL.md:185-187 SKILL.md:189 SKILL.md:190 SKILL.md:193 SKILL.md:205 SKILL.md:208-211 SKILL.md:214 SKILL.md:216 SKILL.md:217 SKILL.md:220 SKILL.md:232-235 SKILL.md:237 SKILL.md:239 SKILL.md:240 SKILL.md:243 SKILL.md:113-122 SKILL.md:134-152 SKILL.md:160-173 SKILL.md:181-193 SKILL.md:201-220 SKILL.md:228-243
📁 Accès au système de fichiers (4)
Audité par: codex

5 juil. 2026, 18:06

Most static hits are Markdown formatting, documentation URLs, or protective exclusions rather than executable risk. Real issues remain in the Bash publish blocks, which interpolate user-controlled values before curl or zip execution and persist owner tokens in a workspace file.

3
Fichiers analysés
419
Lignes analysées
38
Éléments à examiner
0
Faux positifs ignorés

Préoccupations de sécurité confirmées (4)

Élevé
Environment file access
> **SECURITY:** The ownerToken MUST NEVER appear in conversation output. The bash blocks below handl
This line describes ownerToken handling and local history storage for deletion tokens. The .env text is protective, but token persistence creates a real sensitive-data risk.
Élevé
Unescaped Shell Placeholder Interpolation
The publish snippets interpolate user-controlled content, paths, namespace, TTL, and entry values into Bash commands before execution. Values containing heredoc delimiters, quotes, or command substitutions can change the generated command.
The Bash snippets place placeholders directly inside heredocs, single-quoted JSON, double-quoted URLs, cd commands, and multipart arguments. Those values come from user input or selected paths.
Élevé
Owner Tokens Persisted In Workspace History
The skill creates .claude/brewpage-history.md and appends owner tokens beside public URLs. These tokens allow deletion of published pages and can be exposed through accidental commits or later file reads.
The file path and echo commands are explicit, and each publish path appends the owner token when present. The skill warns not to print tokens but still stores them locally.
Moyen
Pre-Built ZIP Upload Bypasses Secret Exclusions
Directory uploads exclude common secret and project files, but the ZIP upload path sends the supplied archive as-is. A ZIP containing credentials, source maps, or repository data would be uploaded without the same filtering.
The SKILL.md instructions describe ZIP files as an alternative input and the ZIP publish block uploads archive=@{zip_file_path}. The exclusion list is only shown for the directory auto-zip path.
Éléments d’évaluation des capacités (31)

Il s’agit de capacités locales réelles qui peuvent être attendues pour cette compétence ; elles nécessitent donc un examen, mais ne sont pas comptabilisées comme comportement malveillant confirmé.

Élevé
Ruby/shell backtick execution · 5 occurrences
```bash
This range is an executable Bash publish block, not only Markdown formatting. It performs curl or archive operations using user-selected content and placeholders.
Élevé
Ruby/shell backtick execution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | html |"
This line writes owner tokens into the local history file. The token is not printed, but it is still stored as sensitive data in the workspace.
Élevé
Ruby/shell backtick execution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | json |"
This line writes owner tokens into the local history file. The token is not printed, but it is still stored as sensitive data in the workspace.
Élevé
Ruby/shell backtick execution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | file |"
This line writes owner tokens into the local history file. The token is not printed, but it is still stored as sensitive data in the workspace.
Élevé
Ruby/shell backtick execution · 2 occurrences
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | site ($F
This line writes owner tokens into the local history file. The token is not printed, but it is still stored as sensitive data in the workspace.
Élevé
Shell command substitution
CONTENT=$(cat <<'BREWPAGE_EOF'
User-provided page content is placed inside a shell heredoc before execution. Content containing the delimiter or shell syntax could alter the command block.
Élevé
Shell command substitution
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/html?ns={ns}&ttl={days}&format=markdown" \
The curl command is constructed from user-controlled placeholders and then executed by Bash. This creates command-injection and unintended upload risk.
Élevé
Shell command substitution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | html |"
The command appends owner tokens to a workspace history file. This intentionally stores sensitive deletion tokens at rest.
Élevé
Shell command substitution
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/json?ns={ns}&ttl={days}" \
The JSON publish block inserts original_json inside a shell command. Quotes or shell metacharacters in user JSON can break the intended curl invocation.
Élevé
Shell command substitution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | json |"
The command appends owner tokens to a workspace history file. This intentionally stores sensitive deletion tokens at rest.
Élevé
Shell command substitution
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/files?ns={ns}&ttl={days}" \
A user-controlled path placeholder is inserted into a curl multipart argument. Unescaped shell metacharacters in the final path can alter the command.
Élevé
Shell command substitution
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | file |"
The command appends owner tokens to a workspace history file. This intentionally stores sensitive deletion tokens at rest.
Élevé
Shell command substitution · 2 occurrences
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/sites?ns={ns}&ttl={days}&entry={entry}" \
The site upload command uses user-controlled namespace, TTL, entry, and archive values inside a shell command. Without strict validation, those values can affect execution.
Élevé
Shell command substitution · 2 occurrences
[ -n "$TOKEN" ] && echo "| $(date '+%Y-%m-%d %H:%M') | [$URL]($URL) | \`$TOKEN\` | {ttl}d | site ($F
The command appends owner tokens to a workspace history file. This intentionally stores sensitive deletion tokens at rest.
Élevé
Template literal with command substitution · 5 occurrences
```bash
The fenced Bash publish block is intended to be executed and contains user-controlled placeholders plus command substitutions. The block can upload data and may be affected by unescaped input.
Moyen
Hardcoded URL
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/html?ns={ns}&ttl={days}&format=markdown" \
This executable curl POST sends user-selected content to brewpage.app. The behavior is disclosed, but it is still a real external upload path.
Moyen
Hardcoded URL
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/json?ns={ns}&ttl={days}" \
This executable curl POST sends user-selected content to brewpage.app. The behavior is disclosed, but it is still a real external upload path.
Moyen
Hardcoded URL
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/files?ns={ns}&ttl={days}" \
This executable curl POST sends user-selected content to brewpage.app. The behavior is disclosed, but it is still a real external upload path.
Moyen
Hardcoded URL · 2 occurrences
RESPONSE=$(curl -s -X POST "https://brewpage.app/api/sites?ns={ns}&ttl={days}&entry={entry}" \
This executable curl POST sends user-selected content to brewpage.app. The behavior is disclosed, but it is still a real external upload path.

Facteurs de risque

🌐 Accès réseau (14)
⚙️ Commandes externes (103)
SKILL.md:18 SKILL.md:19 SKILL.md:20 SKILL.md:21 SKILL.md:27 SKILL.md:28 SKILL.md:29 SKILL.md:30 SKILL.md:31 SKILL.md:33 SKILL.md:38-41 SKILL.md:41-43 SKILL.md:43 SKILL.md:46 SKILL.md:47 SKILL.md:48-52 SKILL.md:52-58 SKILL.md:58-68 SKILL.md:68-71 SKILL.md:71 SKILL.md:72 SKILL.md:73 SKILL.md:78 SKILL.md:79-80 SKILL.md:80-86 SKILL.md:86-96 SKILL.md:96-99 SKILL.md:99-101 SKILL.md:101-104 SKILL.md:104 SKILL.md:105-106 SKILL.md:106-110 SKILL.md:110 SKILL.md:113-122 SKILL.md:122-123 SKILL.md:123-129 SKILL.md:129-131 SKILL.md:131-134 SKILL.md:134-152 SKILL.md:152-157 SKILL.md:157-160 SKILL.md:160-173 SKILL.md:173-178 SKILL.md:178-181 SKILL.md:181-193 SKILL.md:193-198 SKILL.md:198-201 SKILL.md:201-220 SKILL.md:220-225 SKILL.md:225-228 SKILL.md:228-243 SKILL.md:243-248 SKILL.md:248-252 SKILL.md:252-253 SKILL.md:253-256 SKILL.md:256-258 SKILL.md:258-259 SKILL.md:259-267 SKILL.md:267-271 SKILL.md:271-272 SKILL.md:272-274 SKILL.md:274-278 SKILL.md:278-279 SKILL.md:279 SKILL.md:280 SKILL.md:281-282 SKILL.md:282 SKILL.md:283 SKILL.md:284 SKILL.md:285 SKILL.md:286 SKILL.md:116 SKILL.md:136-139 SKILL.md:140 SKILL.md:143-146 SKILL.md:148 SKILL.md:149 SKILL.md:152 SKILL.md:164-167 SKILL.md:169 SKILL.md:170 SKILL.md:173 SKILL.md:185-187 SKILL.md:189 SKILL.md:190 SKILL.md:193 SKILL.md:205 SKILL.md:208-211 SKILL.md:214 SKILL.md:216 SKILL.md:217 SKILL.md:220 SKILL.md:232-235 SKILL.md:237 SKILL.md:239 SKILL.md:240 SKILL.md:243 SKILL.md:113-122 SKILL.md:134-152 SKILL.md:160-173 SKILL.md:181-193 SKILL.md:201-220 SKILL.md:228-243
📁 Accès au système de fichiers (4)
Audité par: codex

30 juin 2026, 05:48

Static analysis flagged many shell, network, filesystem, and sensitive-file patterns. Review found these patterns are largely intentional publishing instructions, with no evidence of prompt injection or hidden malicious behavior, but the skill sends user-selected content to an external public hosting service and stores owner tokens locally.

3
Fichiers analysés
419
Lignes analysées
7
Éléments à examiner
2
Faux positifs ignorés

Préoccupations de sécurité confirmées (3)

Moyen
External Public Publishing via Shell Commands
The skill intentionally uses Bash and curl to send text, JSON, files, ZIP archives, and site archives to brewpage.app. This is core functionality, but it can expose private user content if the user selects the wrong file or directory.
The network calls are explicit curl POST commands to brewpage.app and are part of the documented publish workflow. The risk is data exposure through intended behavior, not covert exfiltration.
Moyen
Owner Tokens Stored in Local Hidden History File
The workflow writes owner tokens to .claude/brewpage-history.md for later deletion. The documentation warns that this file is private, but storing bearer-style delete tokens in a workspace file creates leakage risk through commits, logs, or sharing.
The file path and token write behavior are directly documented. The skill includes warnings, which reduce but do not remove the risk.
Moyen
Directory Archiving Can Publish Local Files
The site flow zips a user-selected directory and uploads it. It excludes common secret, VCS, dependency, editor, sourcemap, and log paths, but any sensitive file outside those patterns could still be published.
The zip command and upload are explicit, and the exclusions confirm awareness of secret-leak risk. Remaining exposure depends on user-selected directory contents.
Faux positifs statiques ignorés (2)

Ces correspondances statiques ont été écartées par l’examen sémantique ou correspondaient uniquement à des jetons de schéma ; elles sont donc affichées par souci de transparence, mais n’influencent pas le score de qualité.

Faible
Hardcoded Service URLs Are Expected for Hosting Integration
Static analysis flagged hardcoded URLs in documentation and curl examples. These point to the declared brewpage.app service and the source repository, so they are expected for this publishing skill.
The URLs match the documented hosting service and repository identity. No unrelated or hidden endpoint was found in the reviewed files.
Faible
Weak Cryptography and Windows SAM Alerts Are Scanner False Positives
The flagged lines contain Markdown text, security notes, or secret-exclusion documentation rather than cryptographic code or Windows credential database access. No evidence found of weak hash usage or SAM database access.
Context around the flagged lines shows prose and placeholders, not crypto APIs or credential database paths. The scanner likely matched short substrings inside normal documentation.

Motifs détectés

Bash Execution Required for PublishingExternal Network UploadsSensitive File Exclusion Pattern
Audité par: codex

2 juin 2026, 12:56

The skill is a legitimate publishing tool for brewpage.app. All network requests target the documented brewpage.app API endpoints. External commands use standard tools (curl, jq, zip, mktemp) for content upload. The skill implements security safeguards: it excludes .env, .git, node_modules, and other sensitive paths from site uploads, never prints owner tokens in conversation, and stores them in a private file. The static scanner flagged many false positives because the skill's core function inherently requires network access and command execution. No malicious intent detected.

3
Fichiers analysés
419
Lignes analysées
6
Éléments à examiner
0
Faux positifs ignorés
Éléments d’évaluation des capacités (3)

Il s’agit de capacités locales réelles qui peuvent être attendues pour cette compétence ; elles nécessitent donc un examen, mais ne sont pas comptabilisées comme comportement malveillant confirmé.

Faible
Network requests to external service
The skill makes HTTPS requests to brewpage.app API endpoints to publish content. This is the core functionality of the skill and is explicitly documented.
Faible
External command execution for content publishing
The skill executes bash commands (curl, jq, zip, mktemp) to publish content and manage temporary files. Commands are hardcoded with no user input injection vectors.
Faible
Filesystem access for content upload
The skill reads user-specified files and directories for upload, and creates temporary zip files in /tmp. It excludes sensitive paths (.env, .git, node_modules) from site archives as a security safeguard.

Motifs détectés

Owner token storage in local file
Audité par: claude