Ae1
- Category
- analysis-evasion
- Confidence
- 100% confidence
- Finding
Referenced artifact was not completely inspected
- Content
md node scripts/keyword-report.js
Security audit
Security checks for vulnerabilities and agentic risk
This skill reads user-provided Amazon Ads credentials to generate Amazon advertising reports and bid listings, with no evidence of hidden execution, persistence, or non-Amazon data transfer.
Install only if you intend to let the skill use your Amazon Ads API credentials. Keep the credential JSON protected, set AMAZON_ADS_PATH deliberately if you do not want the default ~/amazon-ads-api.json path used, and be aware that some documented campaign-level commands reference scripts not included in this artifact.
Referenced artifact was not completely inspected
node scripts/keyword-report.js
Referenced artifact was not completely inspected
node scripts/get-bids.js
Referenced artifact was not completely inspected
node scripts/get-bids.js
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Node.js built-ins only (`https`, `zlib`, `fs`, `path`). No npm install required.
## Notes
- Access tokens expire — refresh via Amazon Login with Advertising if needed
- The `GZIP_JSON` format is gunzipped automatically by poll-report.js
- Reports are only available for the previous day and earlier (endDate = yesterday)
- `get-bids.js` uses the live v3 keyword list endpoint — no async report needed, instant response
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
async function getAccessToken() {
const creds = getCreds();
const res = await fetch('https://api.amazon.com/auth/o2/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
async function getAccessToken() {
const creds = getCreds();
const res = await fetch('https://api.amazon.com/auth/o2/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
The inline comment at L114 says winning keywords are those with clicks > 0 OR impressions >= 50, but the module header documentation at L004 states impressions > 50. The code implements >= 50 at L115, so one of the documented intent statements is inaccurate and actively contradicts actual behavior at the threshold boundary.
Detected: suspicious.env_credential_access, suspicious.exposed_secret_literal