This skill facilitates SSRF and data exfiltration by allowing unvalidated user input in network requests, exposes sensitive environment variables, uses insecure CORS policies, and lacks necessary security capability declarations.
npx skills add https://github.com/expo/skillsHTTP exfiltration with embedded environment variables detected
https://api.weather.com/v1/current?city=${city}&key=${process.env.WEATHER_API_KEYThe skill provides a 'Proxy External API' pattern that encourages developers to pass user-controlled input directly into a URL string used for a fetch request, which is a classic SSRF vulnerability pattern. [severity raised to high: this vector is independently flagged by both deterministic and LLM analysis (ADR-0065 corroboration).]
const response = await fetch(`https://api.weather.com/v1/current?city=${city}&key=${process.env.WEATHER_API_KEY}`);The skill suggests using a wildcard CORS policy ('*') for API routes, which can expose sensitive server-side endpoints to unauthorized cross-origin requests if not carefully managed. [severity raised to high: this vector is independently flagged by both deterministic and LLM analysis (ADR-0065 corroboration).]
"Access-Control-Allow-Origin": "*",
Environment secret flows to a network sink (JS/TS)
taint source (line 7): process.env.WEATHER_API_KEY → sink: fetch(
`https://api.weather.com/v1/current?city=${city}&key=${process.env.WEATHER_API_KEY}`
)Environment secret flows to a network sink (JS/TS)
taint source (line 9): process.env.OPENAI_API_KEY → sink: fetch("https://api.openai.com/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
},
body: JSON.stringify({
model: "gpt-4",
messages: [{ role: "user", content: prompt }],
}),
})User input is used to construct a URL for a server-side HTTP request. This could allow an attacker to make requests to internal services or cloud metadata endpoints (Server-Side Request Forgery). Validate URLs against an allowlist of permitted hosts and schemes.
taint source (line 7): process.env.WEATHER_API_KEY → sink: fetch(
`https://api.weather.com/v1/current?city=${city}&key=${process.env.WEATHER_API_KEY}`
)User input is used to construct a URL for a server-side HTTP request. This could allow an attacker to make requests to internal services or cloud metadata endpoints (Server-Side Request Forgery). Validate URLs against an allowlist of permitted hosts and schemes.
taint source (line 9): process.env.OPENAI_API_KEY → sink: fetch("https://api.openai.com/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
},
body: JSON.stringify({
model: "gpt-4",
messages: [{ role: "user", content: prompt }],
}),
})Untrusted data flows to an external API call without validation. Data from sources like window.name, document.location, or other client-controlled inputs is passed to library functions that may interpret it in unsafe ways. Validate or sanitize all untrusted input before passing it to external APIs.
taint source (line 7): process.env.WEATHER_API_KEY → sink: fetch(
`https://api.weather.com/v1/current?city=${city}&key=${process.env.WEATHER_API_KEY}`
)Untrusted data flows to an external API call without validation. Data from sources like window.name, document.location, or other client-controlled inputs is passed to library functions that may interpret it in unsafe ways. Validate or sanitize all untrusted input before passing it to external APIs.
taint source (line 9): process.env.OPENAI_API_KEY → sink: fetch("https://api.openai.com/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
},
body: JSON.stringify({
model: "gpt-4",
messages: [{ role: "user", content: prompt }],
}),
})Unpinned npx package execution — `npx <pkg>` without a version pin pulls latest from npm at runtime
npx expo
Global/unverified dependency execution — global npm/yarn package, dotnet tool, or auto-confirmed npx run without version or integrity pinning
npm install -g
[](https://mondoo.com/ai-agent-security/skills/github/expo/skills/expo-api-routes)<a href="https://mondoo.com/ai-agent-security/skills/github/expo/skills/expo-api-routes"><img src="https://mondoo.com/ai-agent-security/api/badge/github/expo/skills/expo-api-routes.svg" alt="Mondoo Skill Check" /></a>https://mondoo.com/ai-agent-security/api/badge/github/expo/skills/expo-api-routes.svgSkills can read files, run commands, and access credentials. Mondoo helps organizations manage the security risks of AI agent skills across their entire fleet.