T08 · Insecure Dependencies
- Location
SKILL.md:42- Finding
Unpinned and Unnecessary Dependency Installation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent ad-research tooling, but it asks agents to install unsafe system packages, run an unsandboxed browser scraper, and use API tokens with weak scoping controls.
Install only in a disposable or isolated environment. Avoid --break-system-packages, keep Chromium sandboxing enabled, use least-privilege short-lived Meta tokens, do not run Phase 2 just because a token exists, and treat third-party API options as sharing your research targets and API keys externally.
SKILL.md:42Unpinned and Unnecessary Dependency Installation
SKILL.md:91Chromium Sandbox Disabled While Processing Remote Content
SKILL.md:265API Credentials Transmitted in URL Query Parameters
SKILL.md:309Unvalidated Pagination URL Allows Requests to Unexpected Hosts
The trigger scope is excessively broad and instructs unconditional invocation for vague competitor-related discussion on Facebook or Instagram. This can cause the agent to activate a scraping/research workflow without clear user intent, leading to unnecessary data collection, unexpected external access, and potential policy bypass through over-eager tool use.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Phase 1: Playwright Scraper (No API key needed)
└── facebook.com/ads/library → Ad creatives, copy, status, platforms, dates
Phase 2: Meta Graph API (Requires access token)
└── graph.facebook.com/v23.0/ads_archive → Spend ranges, impressions, demographics
Analysis Layer: Claude synthesizes insights from both sources
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Phase 1: Playwright Scraper (No API key needed)
└── facebook.com/ads/library → Ad creatives, copy, status, platforms, dates
Phase 2: Meta Graph API (Requires access token)
└── graph.facebook.com/v23.0/ads_archive → Spend ranges, impressions, demographics
Analysis Layer: Claude synthesizes insights from both sources
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
1. Go to [Meta for Developers](https://developers.facebook.com/) → Create App
2. Go to [facebook.com/ID](https://www.facebook.com/ID) → Confirm identity (required for spend data)
3. Generate a User Access Token with `ads_read` permission from [Graph API Explorer](https://developers.facebook.com/tools/explorer/)
4. Set as env var: `export META_ACCESS_TOKEN="your_token_here"`
### Core API Script
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `access_token` | string | ✅ | Your Meta Graph API access token |
| `search_terms` | string | ⚠️ | Keyword to search. Either this or search_page_ids required |
| `search_page_ids` | string | ⚠️ | Comma-separated page IDs. Most precise method |
| `ad_reached_countries` | JSON array | ✅ | e.g. `["US"]`, `["IN","PK"]`, `["ALL"]` |
The skill instructs writing executable scripts and raw ad data to /tmp without prominently disclosing local file creation, retention, or cleanup behavior. In shared or persistent environments, this can expose scraped data or leave behind executable artifacts that other processes or users may access.
The Playwright setup hard-codes locale="en-US", which imposes a specific language/locale behavior regardless of user preference. The file does not offer opt-in, locale selection, or a clear region-specific justification for this constraint.
The example code sends an API key plus potentially sensitive search targets such as page IDs and competitor queries to a third-party service, but the documentation does not disclose that this causes user data and research activity to be shared outside Meta or the local environment. In a competitive-intelligence skill, those queries may reveal business strategy, customer targeting, or monitoring interests, making the omission materially risky even if the transfer is intentional for functionality.
The ad-details example performs another third-party request using an API key and identifiers such as ad_archive_id and page_id without warning that these values will be disclosed to an external provider. Because the skill is designed for ad surveillance and competitor intelligence, these lookups can expose sensitive investigative intent and operational patterns to the third party.
No suspicious patterns detected.