Back to skill

Security audit

geeknews-bot

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it advertises, but its setup encourages persistent, broadly exposed API credentials and unattended external sending that users should review carefully.

Install only if you are comfortable with generated briefs being sent through Anthropic and Telegram. Use narrowly scoped credentials, avoid putting tokens in global shell startup files, do not configure the optional GitHub token unless actually needed, and review any cron schedule before enabling unattended sends.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
references/telegram_setup.md:17
Finding

Insecure Persistent Storage and Exposure of API Credentials

Content
View full analysis
/getUpdates ``` ```bash # Add to ~/.bashrc or ~/.zshrc export TELEGRAM_BOT_TOKEN="your-bot-token-here" export TELEGRAM_CHAT_ID="your-chat-id-here" # Optional: Increase the GitHub API rate limit export GITHUB_TOKEN="your-github-token-here" ``` ```bash source ~/.bashrc ``` ```bash curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \ -d chat_id="${TELEGRAM_CHAT_ID}" \ -d text="Test message" \ -d parse_mode="MarkdownV2" ``` ### Technical Analysis The setup guide instructs users to store the Telegram bot token and an optional GitHub token in plaintext shell startup files. Secrets exported from `.bashrc` or `.zshrc` persist across sessions and are inherited by every descendant process launched from the shell. This unnecessarily increases the number of processes and tools that can access the credentials. The included implementation does not consume `GITHUB_TOKEN`, so requesting and persistently exporting that credential exceeds the minimum privileges and credentials required by the current Skill. The guide also instructs users to place the Telegram bot token in a browser-accessed URL and in a curl command URL. A token embedded in a URL may be retained in browser history, synchronized browser data, diagnostic telemetry, proxy logs, or monitoring systems. A token expanded into a command line may also be exposed through shell history or process inspection, depending on how the command is executed and the operating system configuration. HTTPS protects the credentials while in transit to Telegram, but it does not mitigate disclosure from local storage, process metadata, browser history, logs, or backups. ### Attack Path 1. A user follow ...[truncated 1519 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (16)

YARA rule 'agent_skill_credential_exfiltration_webhook': AI agent skill credential harvesting followed by webhook or external exfiltration [agent_skills]

Critical
Category
YARA Match
Confidence
85% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · references/telegram_setup.md (reported line 17)May include surrounding context.

봇 생성

  1. 텔레그램에서 @BotFather 검색
  2. /newbot 명령어 전송
  3. 봇 이름 입력 (예: GeekNews Brief Bot)
  4. 봇 username 입력 (예: geeknews_oss_brief_bot)
  5. 발급된 봇 토큰을 안전하게 저장

2. Chat ID 확인

개인 채팅

  1. 생성한 봇에게 아무 메시지 전송
  2. 브라우저에서 접속:
    text
    https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates
    
  3. JSON 응답에서 "chat": {"id": 123456789} 확인

그룹/채널

  1. 봇을 그룹에 추가
  2. 그룹에서 아무 메시지 전송
  3. 위와 같은 방법으로 chat ID 확인 (그룹은 음수 ID)

3. 환경변수 설정

bash
# ~/.bashrc 또는 ~/.zshrc에 추가
export TELEGRAM_BOT_TOKEN="your-bot-token-here"
export TELEGRAM_CHAT_ID="your-chat-id-here"

# 선택: GitHub API rate limit 완화용
export GITHUB_TOKEN="your-github-token-here"

설정 후:

bash
source ~/.bashrc

4. 테스트

bash
curl -s -X POS

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The documented behavior and the detected capabilities do not align: the skill is presented as a news curation workflow, but the finding indicates undeclared external Telegram transmission and missing implementation for the advertised collection and selection logic. Behavior mismatches are dangerous because they can hide data exfiltration, bypass user expectations, and prevent meaningful consent for outbound network actions.

Content

No source excerpt is available for this finding.

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/run_geeknews_brief.sh (reported line 37)May include surrounding context.

sh
PROMPT="오늘 GeekNews(https://news.hada.io)의 메인페이지를 확인하고, geeknews-oss-brief 스킬의 선정 기준에 따라 HOT 이슈 5개를 선정해서 텔레그램 메시지 포맷으로 작성해줘. 오픈소스와 GitHub star 급상승 프로젝트를 우선순위 높게."
    
    RESPONSE=$(curl -s https://api.anthropic.com/v1/messages \
        -H "content-type: application/json" \
        -H "x-api-key: ${ANTHROPIC_API_KEY}" \
        -H "anthropic-version: 2023-06-01" \

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding

The skill describes behavior that requires network, shell, file access, and environment-variable use, but it does not declare any tool scope or permissions boundaries. This creates an overbroad execution surface where an agent may invoke sensitive capabilities without explicit user or platform visibility, increasing the risk of unintended data access or external transmission.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger phrases are broad enough to match many normal requests about developer news or summaries, which can cause the skill to activate unexpectedly. In this skill's context, accidental activation is more dangerous because activation can lead to network access and external delivery to Telegram, potentially sending content without the user specifically asking for transmission.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill lacks a clear warning that generated content will be sent to Telegram, an external third-party service, potentially on an automated schedule. Without a prominent disclosure, users may not realize that their requested summary or derived content leaves the local agent environment, undermining informed consent and increasing privacy risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The guide directs users to place long-lived secrets such as TELEGRAM_BOT_TOKEN and GITHUB_TOKEN in shell startup files like ~/.bashrc or ~/.zshrc without warning about exposure risks. Those files are often broadly readable via backups, dotfile sync, shell history mistakes, or accidental commits, so this increases the chance of credential disclosure even though it is framed as setup guidance.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/telegram_setup.md (reported line 45)May include surrounding context.

4. 테스트

bash
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
  -d chat_id="${TELEGRAM_CHAT_ID}" \
  -d text="테스트 메시지입니다" \
  -d parse_mode="MarkdownV2"

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The hardcoded use of https://api.anthropic.com confirms dependence on a third-party network endpoint and therefore a concrete external transmission channel. While the current prompt appears low sensitivity, this daily automated briefing skill increases the likelihood of routine unattended data transfer and potential policy/compliance issues if inputs expand over time.

Content

Scanner excerpt · scripts/run_geeknews_brief.sh (reported line 37)May include surrounding context.

sh
PROMPT="오늘 GeekNews(https://news.hada.io)의 메인페이지를 확인하고, geeknews-oss-brief 스킬의 선정 기준에 따라 HOT 이슈 5개를 선정해서 텔레그램 메시지 포맷으로 작성해줘. 오픈소스와 GitHub star 급상승 프로젝트를 우선순위 높게."
    
    RESPONSE=$(curl -s https://api.anthropic.com/v1/messages \
        -H "content-type: application/json" \
        -H "x-api-key: ${ANTHROPIC_API_KEY}" \
        -H "anthropic-version: 2023-06-01" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The hardcoded use of https://api.anthropic.com confirms dependence on a third-party network endpoint and therefore a concrete external transmission channel. While the current prompt appears low sensitivity, this daily automated briefing skill increases the likelihood of routine unattended data transfer and potential policy/compliance issues if inputs expand over time.

Content

Scanner excerpt · scripts/run_geeknews_brief.sh (reported line 37)May include surrounding context.

sh
PROMPT="오늘 GeekNews(https://news.hada.io)의 메인페이지를 확인하고, geeknews-oss-brief 스킬의 선정 기준에 따라 HOT 이슈 5개를 선정해서 텔레그램 메시지 포맷으로 작성해줘. 오픈소스와 GitHub star 급상승 프로젝트를 우선순위 높게."
    
    RESPONSE=$(curl -s https://api.anthropic.com/v1/messages \
        -H "content-type: application/json" \
        -H "x-api-key: ${ANTHROPIC_API_KEY}" \
        -H "anthropic-version: 2023-06-01" \

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The module docstring, usage text, environment variable descriptions, and later user-facing messages are all written in Korean, which imposes a specific language on users without any opt-in or alternative locale support. Under the stated policy, forcing a language without user choice is a natural-language policy violation unless the locale restriction is clearly justified.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/telegram_setup.md (reported line 17)May include surrounding context.

md
def send_telegram(token: str, chat_id: str, message: str, parse_mode: str = "MarkdownV2") -> dict:
    """텔레그램 메시지 전송"""
    url = f"https://api.telegram.org/bot{token}/sendMessage"
    
    payload = {
        "chat_id": chat_id,

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/telegram_setup.md (reported line 45)May include surrounding context.

md
def send_telegram(token: str, chat_id: str, message: str, parse_mode: str = "MarkdownV2") -> dict:
    """텔레그램 메시지 전송"""
    url = f"https://api.telegram.org/bot{token}/sendMessage"
    
    payload = {
        "chat_id": chat_id,

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/send_telegram.py (reported line 24)May include surrounding context.

python
def send_telegram(token: str, chat_id: str, message: str, parse_mode: str = "MarkdownV2") -> dict:
    """텔레그램 메시지 전송"""
    url = f"https://api.telegram.org/bot{token}/sendMessage"
    
    payload = {
        "chat_id": chat_id,

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The summary rules specify "한국어 우선" for titles, which imposes a language preference in the skill behavior. The file does not indicate that the user can opt into another language or choose locale preferences.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

Natural-language strings in the script are written exclusively in Korean and the generated message prompt explicitly requests output in a Korean Telegram-oriented format, with no option for user language selection. This can violate language/locale policy when a skill imposes a specific language without opt-in or justification.

Content

No source excerpt is available for this finding.