📦

審計紀錄

brewpage-publish - 9 審計

版本對比

各稽核版本間的能力與發現變化,最新在前。

版本日期結果複核項目相對上一版變化
v9 最新2026年10月27日 上午05:10 無已確認發現0能力無變化
v8 2026年10月27日 上午04:38 1 已確認0能力無變化
v7 2026年10月27日 上午04:04 1 已確認0能力無變化
v6 2026年10月26日 下午10:31 1 已確認0能力無變化
v5 2026年10月26日 下午08:38 4 已確認0環境變數
v4 2026年7月5日 下午06:06 4 已確認31能力無變化
v3 2026年7月5日 下午06:06 4 已確認31 環境變數
v2 2026年6月30日 上午05:48 3 已確認0環境變數
v1 2026年6月2日 下午12:56 無已確認發現3基線

2026年10月27日 上午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
已掃描檔案
1,436
分析行數
4
複核項目
0
已忽略的誤報

風險因素

🌐 網路存取 (14)
⚙️ 外部命令 (50)
📁 檔案系統存取 (37)
🔑 環境變數 (6)
審計單位: codex

2026年10月27日 上午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
已掃描檔案
1,319
分析行數
5
複核項目
0
已忽略的誤報

已確認的安全問題 (1)

中
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.

風險因素

🌐 網路存取 (14)
⚙️ 外部命令 (50)
📁 檔案系統存取 (33)
🔑 環境變數 (6)
審計單位: codex

2026年10月27日 上午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
已掃描檔案
1,268
分析行數
5
複核項目
0
已忽略的誤報

已確認的安全問題 (1)

中
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.

風險因素

🌐 網路存取 (14)
⚙️ 外部命令 (50)
📁 檔案系統存取 (32)
🔑 環境變數 (6)
審計單位: codex

2026年10月26日 下午10: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
已掃描檔案
1,260
分析行數
5
複核項目
0
已忽略的誤報

已確認的安全問題 (1)

高
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.

風險因素

🌐 網路存取 (14)
⚙️ 外部命令 (50)
📁 檔案系統存取 (32)
🔑 環境變數 (6)
審計單位: codex

2026年10月26日 下午08: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
已掃描檔案
1,086
分析行數
8
複核項目
0
已忽略的誤報

已確認的安全問題 (4)

高
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.
高
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.
中
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.
中
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.

風險因素

🌐 網路存取 (14)
⚙️ 外部命令 (50)
📁 檔案系統存取 (28)
🔑 環境變數 (4)
審計單位: codex

2026年7月5日 下午06: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
已掃描檔案
419
分析行數
38
複核項目
0
已忽略的誤報

已確認的安全問題 (4)

高
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.
高
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.
高
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.
中
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.
能力複核項目 (31)

這些是真實的本機能力,對此技能而言可能是預期行為,因此需要複核,但不會按已確認的惡意行為計分。

高
Ruby/shell backtick execution · 5 處
```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.
高
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.
高
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.
高
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.
高
Ruby/shell backtick execution · 2 處
[ -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.
高
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.
高
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.
高
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.
高
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.
高
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.
高
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.
高
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.
高
Shell command substitution · 2 處
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.
高
Shell command substitution · 2 處
[ -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.
高
Template literal with command substitution · 5 處
```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.
中
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.
中
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.
中
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.
中
Hardcoded URL · 2 處
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.

風險因素

🌐 網路存取 (14)
⚙️ 外部命令 (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
📁 檔案系統存取 (4)
審計單位: codex

2026年7月5日 下午06: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
已掃描檔案
419
分析行數
38
複核項目
0
已忽略的誤報

已確認的安全問題 (4)

高
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.
高
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.
高
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.
中
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.
能力複核項目 (31)

這些是真實的本機能力,對此技能而言可能是預期行為,因此需要複核,但不會按已確認的惡意行為計分。

高
Ruby/shell backtick execution · 5 處
```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.
高
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.
高
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.
高
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.
高
Ruby/shell backtick execution · 2 處
[ -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.
高
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.
高
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.
高
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.
高
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.
高
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.
高
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.
高
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.
高
Shell command substitution · 2 處
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.
高
Shell command substitution · 2 處
[ -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.
高
Template literal with command substitution · 5 處
```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.
中
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.
中
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.
中
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.
中
Hardcoded URL · 2 處
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.

風險因素

🌐 網路存取 (14)
⚙️ 外部命令 (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
📁 檔案系統存取 (4)
審計單位: codex

2026年6月30日 上午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
已掃描檔案
419
分析行數
7
複核項目
2
已忽略的誤報

已確認的安全問題 (3)

中
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.
中
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.
中
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.
已忽略的靜態誤報 (2)

這些靜態命中已被語義複核判定為誤報,或只命中了 schema 定義中的詞;此處保留顯示以提高透明度,但不影響品質評分。

低
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.
低
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.

偵測到的模式

Bash Execution Required for PublishingExternal Network UploadsSensitive File Exclusion Pattern
審計單位: codex

2026年6月2日 下午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
已掃描檔案
419
分析行數
6
複核項目
0
已忽略的誤報
能力複核項目 (3)

這些是真實的本機能力,對此技能而言可能是預期行為,因此需要複核,但不會按已確認的惡意行為計分。

低
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.
低
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.
低
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.

偵測到的模式

Owner token storage in local file
審計單位: claude