Back to skill

Security audit

Job Search

Security checks for vulnerabilities and agentic risk

Overview

This skill is a job-search tool, but its packaged behavior and documentation materially overstate live platform searching and under-disclose mock data, persistence, exports, and scraping-circumvention guidance.

Review this carefully before installing. Treat results as potentially mixed live and synthetic data, do not rely on them for important job-market decisions without checking the original platform links, and avoid running the test or deployment scripts unless you are comfortable with local file creation and third-party scraping behavior.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/zhilian_parser.py:156
Finding

Unrestricted URL Fetching Enables Server-Side Request Forgery

Content
View full analysis
Optional[Dict]: try: response = self.session.get(job_url, timeout=10) ``` ```python # scripts/zhilian_parser.py:156-159 def get_job_detail(self, job_url: str) -> Optional[Dict]: try: response = self.session.get(job_url, timeout=10) ``` ```python # scripts/qiancheng_parser.py:170-173 def get_job_detail(self, job_url: str) -> Optional[Dict]: try: response = self.session.get(job_url, timeout=10) ``` ### Technical Analysis All three parser classes expose a public `get_job_detail()` method that accepts an arbitrary URL and passes it directly to `requests.Session.get()`. The code does not validate: - The URL scheme. - The destination hostname. - Whether the resolved address is loopback, private, link-local, reserved, or multicast. - Whether the destination belongs to the recruitment platform handled by the parser. - Redirect destinations. The required functionality only needs access to known recruitment domains. Allowing arbitrary destinations creates an SSRF primitive that can access any HTTP service reachable from the process. The normal command-line search workflow does not currently invoke these methods, which reduces immediate exposure. However, they are public APIs and may be called directly by an integration or future workflow. In addition, job URLs extracted from HTML are not consistently restricted to expected platform domains. ### Attack Path 1. An attacker supplies a crafted URL through an integration that calls `get_job_detail()`. 2. The URL targets a service reachable from the Skill host, such as a loopback service, private-network application, or cloud metadata ...[truncated 1341 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
scripts/requirements.txt:1
Finding

Unpinned Dependencies and Missing Integrity Verification

Content
View full analysis
=2.31.0 beautifulsoup4>=4.12.0 lxml>=4.9.0 fake-useragent>=1.4.0 ``` ```bash # scripts/setup_and_test.sh:17 pip3 install requests beautifulsoup4 fake-useragent lxml -q ``` The documented installation flow also invokes pip without hash verification: ```bash pip install -r scripts/requirements.txt ``` ### Technical Analysis The dependency manifest uses open-ended minimum-version constraints rather than exact, reviewed versions. As a result, installing the Skill at different times can retrieve materially different package versions. The shell setup script further bypasses the dependency manifest and installs packages by name without version constraints. Neither installation path uses a lock file, package hashes, a restricted package index, or integrity enforcement. The package names are consistent with the documented functionality, and the audit found no evidence that they are current typosquatting or dependency-confusion packages. The risk arises from future package compromise, unexpected releases, compromised distribution infrastructure, or incompatible transitive dependency resolution. Python package installation may execute package build logic. Consequently, dependency installation is a code-execution boundary and should use reproducible, verified artifacts. ### Attack Path 1. A user runs the documented pip command or `scripts/setup_and_test.sh`. 2. pip queries its configured package index and resolves the newest versions satisfying the open-ended constraints. 3. A maliciously modified future release, compromised package, or unsafe transitive dependency is selected. 4. pip downloads the package without compari ...[truncated 1104 chars]
Remediation
View remediation
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (132)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the code only handles one platform while claiming three and does not implement salary filtering, the discrepancy is material rather than cosmetic. Security review cannot rely on descriptions that overstate benign functionality while understating side effects or limitations.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill metadata claims to search major Chinese recruitment platforms, but this implementation mainly searches a local JSON database and fabricates supplemental mock jobs when results are insufficient. That is a capability/integrity mismatch: downstream users or agents may believe results are live platform data and make decisions based on synthetic or stale records, which is especially risky in a job-search context where authenticity matters.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill includes a database-modifying capability that allows manual job insertion and persistence, which is unrelated to a read/search-focused job-search skill. This expands the attack surface by enabling unauthorized data tampering, poisoning of future search results, and persistence of misleading records in the local database.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

Manifest 描述将该技能定位为面向三大中国招聘平台的搜索能力,并支持真实的平台级筛选;但 search() 实际只执行本地 JSON 数据库检索,并在结果不足时调用 _get_mock_jobs() 生成模拟职位。L231-L237 甚至明确表明外部 API 只是预留接口而未实现,因此实际行为与技能对外宣称的核心能力明显不符。

Content

No source excerpt is available for this finding.