T09 · Insecure Skill Coding Practices
- Location
SKILL.md:233- Finding
Steam API Key Exposed in Command-Line URLs
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent for Steam inventory and trade management, but it asks users to handle live Steam credentials and perform item-transfer actions without enough safety guidance.
Install only if you are comfortable giving the agent access to your Steam session cookies and API key. Treat those values like passwords, avoid logging or sharing commands that contain them, verify every partner ID and asset ID manually, and require an explicit preview before sending or accepting any trade.
SKILL.md:233Steam API Key Exposed in Command-Line URLs
The setup instructs users to extract and store Steam session cookies, session IDs, and API keys without clear warnings that these are highly sensitive authentication secrets. Exposure of these values can let anyone impersonate the user for inventory access and trade actions, potentially leading to account abuse and item theft.
The skill documents high-risk trade actions including sending, accepting, canceling, and declining offers, but it does not prominently warn that these actions can irreversibly transfer valuable virtual items or cause permanent loss if the wrong offer is accepted or sent. In an agent context, omission of explicit confirmation and consequence warnings increases the chance of accidental destructive actions with real monetary value.
This command transmits authenticated Steam session cookies and a trade token to Steam in order to create a trade offer, which can directly move items of real-world value. In an agent workflow, any mistaken parameter substitution, prompt injection, or unauthorized execution could result in fraudulent trades or asset loss.
}'
# Send with trade token (non-friend)
curl -s "https://steamcommunity.com/tradeoffer/new/send" \
-X POST \
-H "Cookie: sessionid=$STEAM_SESSION_ID; $STEAM_COOKIES" \
-H "Referer: https://steamcommunity.com/tradeoffer/new/?partner=$PARTNER_ACCOUNT_ID&token=$TRADE_TOKEN" \
This variant sends an authenticated trade offer to a friend using live session credentials, enabling direct transfer of inventory items. Because it performs a state-changing external action with account authority, misuse or automation errors can cause irreversible loss even without a trade token.
To send to a friend (no token needed), omit the token from the Referer and set trade_offer_create_params to {}:
curl -s "https://steamcommunity.com/tradeoffer/new/send" \
-X POST \
-H "Cookie: sessionid=$STEAM_SESSION_ID; $STEAM_COOKIES" \
-H "Referer: https://steamcommunity.com/tradeoffer/new/?partner=$PARTNER_ACCOUNT_ID" \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Get all active trade offers (sent and received)
curl -s "https://api.steampowered.com/IEconService/GetTradeOffers/v1/?key=$STEAM_API_KEY&get_sent_offers=1&get_received_offers=1&active_only=1&get_descriptions=1&language=english" \
| jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Get all active trade offers (sent and received)
curl -s "https://api.steampowered.com/IEconService/GetTradeOffers/v1/?key=$STEAM_API_KEY&get_sent_offers=1&get_received_offers=1&active_only=1&get_descriptions=1&language=english" \
| jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Get all active trade offers (sent and received)
curl -s "https://api.steampowered.com/IEconService/GetTradeOffers/v1/?key=$STEAM_API_KEY&get_sent_offers=1&get_received_offers=1&active_only=1&get_descriptions=1&language=english" \
| jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Get all active trade offers (sent and received)
curl -s "https://api.steampowered.com/IEconService/GetTradeOffers/v1/?key=$STEAM_API_KEY&get_sent_offers=1&get_received_offers=1&active_only=1&get_descriptions=1&language=english" \
| jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Get all active trade offers (sent and received)
curl -s "https://api.steampowered.com/IEconService/GetTradeOffers/v1/?key=$STEAM_API_KEY&get_sent_offers=1&get_received_offers=1&active_only=1&get_descriptions=1&language=english" \
| jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Get all active trade offers (sent and received)
curl -s "https://api.steampowered.com/IEconService/GetTradeOffers/v1/?key=$STEAM_API_KEY&get_sent_offers=1&get_received_offers=1&active_only=1&get_descriptions=1&language=english" \
| jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Get all active trade offers (sent and received)
curl -s "https://api.steampowered.com/IEconService/GetTradeOffers/v1/?key=$STEAM_API_KEY&get_sent_offers=1&get_received_offers=1&active_only=1&get_descriptions=1&language=english" \
| jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Get all active trade offers (sent and received)
curl -s "https://api.steampowered.com/IEconService/GetTradeOffers/v1/?key=$STEAM_API_KEY&get_sent_offers=1&get_received_offers=1&active_only=1&get_descriptions=1&language=english" \
| jq '.'
The accept-offer request uses authenticated cookies to finalize a pending trade, which may permanently exchange items once confirmed. This is dangerous because accepting the wrong tradeofferid or a manipulated offer can immediately authorize unwanted asset transfer.
TRADE_OFFER_ID="1234567890"
PARTNER_STEAM_ID="76561198012345678"
curl -s "https://steamcommunity.com/tradeoffer/$TRADE_OFFER_ID/accept" \
-X POST \
-H "Cookie: sessionid=$STEAM_SESSION_ID; $STEAM_COOKIES" \
-H "Referer: https://steamcommunity.com/tradeoffer/$TRADE_OFFER_ID/" \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -s "https://api.steampowered.com/IEconService/CancelTradeOffer/v1/" \
-X POST \
-d "key=$STEAM_API_KEY" \
-d "tradeofferid=$TRADE_OFFER_ID"
Across multiple examples, the skill forces English locale in request parameters, which is a natural-language policy concern when no opt-in or alternative is provided. The file does not explain why English is required or mention that users may substitute another language.
No suspicious patterns detected.