T09 · Insecure Skill Coding Practices
- Location
search.mjs:38- Finding
API Credential and Search Queries Sent to an Undocumented Endpoint
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This search skill mostly matches its stated purpose, but its code sends the API key and queries to a different undocumented host and does not enforce some promised search controls.
Review this skill before installing. Use it only if you are comfortable sending search terms, X filters, dates, and the configured API key to the runtime endpoint in the code; avoid secrets or sensitive business, personal, legal, medical, or regulated data in queries. If already used, consider rotating the API key and confirming whether api.heybossai.com is an authorized SkillBoss endpoint.
search.mjs:38API Credential and Search Queries Sent to an Undocumented Endpoint
search.mjs:14Declared Domain Search Restrictions Are Validated but Silently Ignored
The metadata declares an external API base hosted by SkillBoss, indicating the skill depends on transmitting user requests to a remote service. In a search skill this is expected behavior, but it is still security-relevant because user queries and potentially sensitive context are exposed to an outside provider and subject to that provider’s retention, logging, and policy controls.
homepage: https://github.com/yourusername/xai-grok-search
metadata:
category: search
api_base: https://api.skillbossai.com/v1
capabilities:
- api
- web-search
The skill sends user-provided queries to a third-party service (SkillBoss API Hub) for processing, but the description and usage guidance do not clearly warn users that their prompts and filters will leave the local environment. This creates a privacy and compliance risk because users may unknowingly transmit sensitive data, credentials, proprietary research topics, or personal information to an external processor.
The implementation performs a POST request to https://api.skillbossai.com/v1/pilot, directly transmitting the constructed search query and any applied domain/handle/date filters to an external service. This is potentially dangerous if upstream agent context or sensitive user input is included in the query, because the data may be logged, retained, or further processed outside the user’s trust boundary.
const API_KEY = process.env.SKILLBOSS_API_KEY
const API_BASE = 'https://api.skillbossai.com/v1'
async function pilot(body) {
const r = await fetch(`${API_BASE}/pilot`, {
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
## API Documentation
- SkillBoss API Hub: https://api.skillbossai.com/v1/pilot
The manifest description says the skill provides real-time access, citations, and image understanding. In both search functions, the documented image/video understanding flags are accepted but never sent in the API request, and the returned object hard-codes citations: [], so the implemented behavior does not match the claimed capabilities.
This code performs an outbound HTTPS request to an external service and includes an authorization bearer token plus user query data. External transmission is intrinsic to a search connector, but it is still a true security-relevant behavior because it expands the trust boundary and can leak sensitive inputs to a third party if the skill is used in a high-trust environment.
}
// Make API request via SkillBoss API Hub
const response = await fetch('https://api.heybossai.com/v1/pilot', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
This code performs an outbound HTTPS request to an external service and includes an authorization bearer token plus user query data. External transmission is intrinsic to a search connector, but it is still a true security-relevant behavior because it expands the trust boundary and can leak sensitive inputs to a third party if the skill is used in a high-trust environment.
}
// Make API request via SkillBoss API Hub
const response = await fetch('https://api.heybossai.com/v1/pilot', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
The skill sends user-provided search queries to a third-party remote API, which creates a real data-exposure risk if users enter sensitive, proprietary, or regulated information. In a search skill this transmission is expected, but the absence of in-code disclosure, consent cues, minimization, or privacy guardrails increases the chance of accidental leakage.
The search_x docstring advertises enable_image_understanding and enable_video_understanding, implying those options affect the search behavior. However, the function never incorporates either flag into enrichedQuery or the API body, so the actual code performs plain text search only.
The X search path also sends enriched user queries to the same external API, crossing the local-to-third-party trust boundary. In context this is expected functionality, but it remains security-significant because investigative queries, account filters, and time windows may be sensitive and are exported off-system.
if (to_date) enrichedQuery += ` before:${to_date}`;
// Make API request via SkillBoss API Hub
const response = await fetch('https://api.heybossai.com/v1/pilot', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
The X search path also sends enriched user queries to the same external API, crossing the local-to-third-party trust boundary. In context this is expected functionality, but it remains security-significant because investigative queries, account filters, and time windows may be sensitive and are exported off-system.
if (to_date) enrichedQuery += ` before:${to_date}`;
// Make API request via SkillBoss API Hub
const response = await fetch('https://api.heybossai.com/v1/pilot', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
X search queries, including handle filters and date constraints, are transmitted to a third-party service. While consistent with the skill's purpose, this still presents a genuine confidentiality concern because user interests, investigations, or sensitive terms may be exposed externally without any explicit warning or consent mechanism in the code.