低风险 — 风险评分 18/100
上次扫描:2 天前 重新扫描
18 /100
post-job
Post free job ads to 20+ job boards such as LinkedIn, Indeed, Ziprecruiter via Fuku AI relay service
Legitimate job posting skill using a third-party relay service (Fuku AI) with documented network access and shell execution; no malicious behavior detected.
技能名称post-job
分析耗时39.1s
引擎pi
可以安装
Pin dependency versions in package.json for supply chain stability. Add actual credential validation in validateCredentials() to avoid misleading empty function. Otherwise safe for use.

安全发现 4 项

严重性 安全发现 位置
低危
Empty validateCredentials() stub
The validateCredentials() function is defined but contains no checks, always returning undefined. This creates a false sense of security.
function validateCredentials() {}
→ Either implement real validation or remove the function to avoid misleading callers.
scripts/post_job.js:72
低危
Unpinned dependency versions
All npm dependencies use caret (^) version ranges, allowing minor/patch updates without review. pnpm-lock.yaml exists but is not enforced.
"axios": "^1.6.0", "dayjs": "^1.11.19", "fuse.js": "^7.0.0"
→ Pin to exact versions (e.g., "axios": "1.6.0") to prevent supply chain surprises.
package.json:9
低危
Mandatory sub-agent spawning directive
SKILL.md mandates spawning a monitoring sub-agent after job posting, with explicit prohibitions on treating it as optional. This is unusual persistence behavior but is fully documented.
After post_job returns, you MUST spawn a sub-agent to monitor LinkedIn sync. Do NOT skip this.
→ Document why persistent monitoring is necessary; ensure runtime enforces this responsibly.
SKILL.md:128
提示
Hardcoded API client tokens
Embedded NUMBER and uid constants are visible in source code. These are anonymous free-tier identifiers, not user credentials, but expose the relay service's API structure.
const NUMBER = "job-Z4nV8cQ1LmT7XpR2bH9sJdK6WyEaF0"
→ Move to environment variables if the relay service supports it.
scripts/post_job.js:57
资源类型声明权限推断权限状态证据
文件系统 READ READ ✓ 一致 loadLocations.js:29 fs.readFileSync(locationsPath)
网络访问 READ WRITE ✓ 一致 post_job.js:84-89,87 axios.post to hapi.fuku.ai (data exfiltration is declared i…
命令执行 WRITE WRITE ✓ 一致 SKILL.md documents node scripts/post_job.js as canonical execution; shell:WRITE …
9 项发现
🔗
中危 外部 URL 外部 URL
https://hapi.fuku.ai
SKILL.md:66
🔗
中危 外部 URL 外部 URL
https://www.linkedin.com/company/business-consulting-inter
SKILL.md:108
🔗
中危 外部 URL 外部 URL
https://hapi.fuku.ai/hr/rc/anon/job/status/linkedin
scripts/monitor_linkedin.js:16
🔗
中危 外部 URL 外部 URL
https://hapi.fuku.ai/hr/rc/anon/job/upload
scripts/post_job.js:84
🔗
中危 外部 URL 外部 URL
https://hapi.fuku.ai/hr/rc/anon/job/create
scripts/post_job.js:85
🔗
中危 外部 URL 外部 URL
https://hapi.fuku.ai/hr/rc/anon/job/sync/linkedin
scripts/post_job.js:86
🔗
中危 外部 URL 外部 URL
https://app.fuku.ai/career/apply?id=$
scripts/post_job.js:164
📧
提示 邮箱 邮箱地址
[email protected]
SKILL.md:289
📧
提示 邮箱 邮箱地址
[email protected]
scripts/post_job.js:266

目录结构

7 文件 · 58.4 KB · 2071 行
JSON 2f · 955L JavaScript 3f · 602L Markdown 1f · 293L YAML 1f · 221L
├─ 📁 assets
│ └─ 📋 locations.json JSON 939L · 23.9 KB
├─ 📁 scripts
│ ├─ 📜 loadLocations.js JavaScript 40L · 988 B
│ ├─ 📜 monitor_linkedin.js JavaScript 159L · 4.4 KB
│ └─ 📜 post_job.js JavaScript 403L · 11.2 KB
├─ 📋 package.json JSON 16L · 356 B
├─ 📋 pnpm-lock.yaml YAML 221L · 6.3 KB
└─ 📝 SKILL.md Markdown 293L · 11.2 KB

依赖分析 4 项

包名版本来源已知漏洞备注
axios ^1.6.0 npm Version not pinned; accepts 1.6.x-1.9.x
dayjs ^1.11.19 npm Version not pinned
dotenv ^17.3.1 npm Imported but not used in scripts; version not pinned
fuse.js ^7.0.0 npm Version not pinned

安全亮点

✓ Input sanitization present for job descriptions (prompt injection defense)
✓ JobId validation uses regex to prevent shell injection
✓ Channel sanitization in monitor script prevents log injection
✓ Internal API protection via Symbol token pattern
✓ SKILL.md fully documents external service usage and data transmitted
✓ No access to ~/.ssh, ~/.aws, .env, or other sensitive paths
✓ No base64 decode+eval patterns, no curl|bash remote execution
✓ No credential harvesting or exfiltration beyond declared job posting data