Back to skill

Security audit

Bumble

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed Bumble automation tool, but it gives broad control over a logged-in dating account and has weak safeguards around location changes, irreversible unmatching, remote-browser trust, and photo downloads.

Install only if you trust the Remote Browser Service and understand that it can operate a logged-in Bumble account, including reading messages, sending messages, exporting profile photos, changing geolocation, and unmatching people. Avoid overriding RBS_BASE_URL unless it is a trusted HTTPS endpoint, do not run debug/content/snapshot commands in shared logs, and treat exported photos/screenshots as sensitive personal data.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/rbs_client.py:15
Finding

Configurable RBS endpoint permits plaintext transmission of bearer tokens and sensitive account data

Content
View full analysis
dict[str, str]: h = {"Content-Type": "application/json"} key = os.environ.get("AC_API_KEY") if key: h["Authorization"] = f"Bearer {key}" return h def _base_url() -> str: return os.environ.get("RBS_BASE_URL", DEFAULT_BASE) def _post(session_id: str, path: str, data: Optional[dict[str, Any]] = None) -> requests.Response: base = _base_url() url = f"{base}/api/sessions/{session_id}{path}" return requests.post(url, headers=_headers(), json=data or {}, timeout=60) def _get(session_id: str, path: str, params: Optional[dict[str, str]] = None) -> requests.Response: base = _base_url() url = f"{base}/api/sessions/{session_id}{path}" return requests.get(url, headers=_headers(), params=params or {}, timeout=60) ``` ### Technical Analysis The application accepts `RBS_BASE_URL` directly from the process environment and uses it as the destination for every Remote Browser Service request. It does not validate that the configured URL: - Uses HTTPS. - Refers to an approved RBS hostname. - Excludes embedded user information. - Resolves to an expected network destination. At the same time, `_headers()` attaches `AC_API_KEY` as a bearer token to requests sent to that endpoint. The same HTTP channel carries browser actions and data associated with Bumble authentication and account operation, potentially including phone numbers, SMS verification codes, messages, profile information, and session-control requests. If `RBS_BASE_URL` is configured with an `http://` URL, TLS protection is lost. A malicious endpoint would directly receive the bearer token and request contents, while an on-path attacker could observe or alter plaintext traffic. This issue requi ...[truncated 1782 chars]
Remediation
View remediation
str: raw = os.environ.get("RBS_BASE_URL", DEFAULT_BASE).rstrip("/") parsed = urlsplit(raw) if parsed.scheme != "https": raise ValueError("RBS_BASE_URL must use HTTPS") if not parsed.hostname or parsed.username or parsed.password: raise ValueError("RBS_BASE_URL is invalid") if parsed.query or parsed.fragment: raise ValueError("RBS_BASE_URL must not contain a query or fragment") return raw ``` ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/bumble_client.py:1028
Finding

Profile photo export performs unvalidated and unbounded server-side URL downloads

Content
View full analysis
list[str]: profile_html = _extract_profile_html(page_html) if not profile_html: return [] matches = re.findall(r' bool: box = _profile_photo_bounds() if not box: return False x = int(box["x"] + box["width"] * 0.82) y = int(box["y"] + box["height"] * 0.5) for kind in ("tap", "click"): resp = action(SESSION_ID, kind=kind, x=x, y=y) if resp.status_code == 200: return True return False def _reset_match_view(match_name: str) -> None: """Best-effort reset back to the normal match thread view.""" try: open_match(match_name) except Exception: pass def _download_photo(url: str, destination_dir: Path, stem: str, index: int) -> str: response = requests.get(url, timeout=60) response.raise_for_status() content_type = (response.headers.get("Content-Type") or "").split(";")[0].strip().lower() suffix = mimetypes.guess_extension(content_type) or ".jpg" if suffix == ".jpe": suffix = ".jpg" filename = f"{stem}_{index:02d}{suffix}" path = destination_dir / filename path.write_bytes(response.content) return str(path) ``` ### Technical Analysis Profile image URLs are extracted from remotely supplied browser HTML and passed directly to `requests.get()`. The download path does not: - Require HTTPS. - Restrict destinations to known B ...[truncated 3183 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (21)

YARA rule 'info_stealer': Information stealer patterns (credential harvesting, browser data theft) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

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

Content

Scanner excerpt · SECURITY.md (reported line 32)May include surrounding context.

md
horized to see.
- It does not attempt to send messages that Bumble's backend does not already
  allow (for example, it cannot send first in a "Their move" match).

## Inputs supplied by the operator

- Phone number used to log in.
- 6-digit SMS code received by the operator.
- Match name(s) the operator wants to read or message.
- Output directory for any photo export.

## Data handled

- Session cookies stored by the Remote Browser Service for the operator's own
  account.
- Messages and profile data visible inside the operator's own Bumble account.
- Optional photo export, written only to a directory the operator specifies.

## Pacing

The script inserts short 1-4 second jitter between actions. This is for page
stability and to stay below normal rate limits on a single human-operator
account; it is not intended to evade abuse detection.

## Reporting issues

If you find a real security issue with this skill (not a usage question), please
open a GitHub issue at
[https://github.com/vas

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

If the underlying skill supports arbitrary navigation, Tinder pages, full-page extraction, screenshots, and geolocation control beyond Bumble-specific workflows, then the published description materially understates its reach. That broadens the attack surface from a bounded dating-app assistant into a general browser automation and data-exfiltration tool, which is substantially more dangerous in the presence of persistent sessions.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

If the underlying skill supports arbitrary navigation, Tinder pages, full-page extraction, screenshots, and geolocation control beyond Bumble-specific workflows, then the published description materially understates its reach. That broadens the attack surface from a bounded dating-app assistant into a general browser automation and data-exfiltration tool, which is substantially more dangerous in the presence of persistent sessions.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The unmatch flow automates an irreversible account action with no additional confirmation prompt in the tool itself before executing UI clicks. If invoked mistakenly, by prompt injection through higher-level orchestration, or with the wrong match name, it can permanently sever contact and potentially discard access to conversation context.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README states the skill drives Bumble through a Remote Browser Service but does not clearly warn that account data, messages, authentication steps, and other private interactions transit a remote service. Because the skill handles phone-number authentication and messaging, failing to disclose this remote-processing model materially increases confidentiality and trust risks.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The README advertises extraction of profile details and export of profile photos without warning that the skill handles sensitive third-party Bumble data. This omission can lead users to underestimate privacy, consent, and retention risks associated with collecting and exporting personal information from other users' profiles.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README discloses that the skill sets Bumble location to San Francisco, which is a material capability beyond the core described functions of session restoration, auth, messaging, and photo export. Changing account location can affect user profile state, matching behavior, and platform trust/safety controls, so an undocumented or weakly justified state-changing action increases the risk of user harm and misuse.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

A capability to set Bumble location appears unrelated to the stated purpose of session handling, messaging, and profile-photo export, which suggests scope expansion beyond user expectation. In a dating-app context, altering location can misrepresent the user, influence who they are shown to, and trigger account or policy consequences, making the mismatch more dangerous than a generic documentation issue.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill declares no explicit tool scope even though it clearly contemplates capabilities such as network access, filesystem reads/writes, environment use, and MCP/remote-browser control. In a high-risk automation context involving authentication, messaging, and photo export, missing scope boundaries increases the chance of overbroad execution, unauthorized data access, or misuse of local/remote resources.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
80% confidence
Finding

Persistent session reuse is inherently sensitive because it enables continued access to an authenticated dating account, messages, matches, and profile data without reauthentication on each action. While session persistence is functionally expected here, the skill does not describe safeguards such as session isolation, expiration, revalidation, or protections against unintended cross-user/session access.

Content

Scanner excerpt · SKILL.md (reported line 38)May include surrounding context.

md
- If Bumble is already authenticated, do **not** run the auth flow again.
- If you gettin `get-started` or `auth` pages then start "Auth flow"
- Re-authenticate only when Bumble is clearly on `get-started`, `auth`, or SMS-confirmation pages.
- For non-auth actions, resume the stored session only; if Bumble is logged out, return an error instead of triggering auth.
- If Bumble is on a CAPTCHA screen, do **not** treat that as a normal logged-in state.
- If Bumble reaches a passkey screen after SMS verification, only **Not Now** may be used automatically; do **not** create or enroll a passkey automatically.
- Do **not** log out unless there is a significant reason.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The instruction to always set location to San Francisco without user opt-in is a location/privacy and policy concern. Automatically overriding geolocation can misrepresent the user's whereabouts, affect account behavior, and violate user expectations or platform rules, especially in a location-sensitive dating service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill supports exporting other users' profile photos to local storage but does not prominently warn about privacy, retention, or downstream handling of those downloaded images. In a dating-app context, saving third-party images locally can create privacy harm, consent issues, and accidental redistribution risks even if the account was authorized to view them in-app.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill metadata emphasizes session/auth, matches, messages, unmatch, and profile-photo export, but this code also extracts and returns structured profile data including bio, education, badges, prompt answers, age, and location details. That creates unnecessary collection and exposure of sensitive third-party dating-profile information beyond the minimally described photo-export behavior, increasing privacy risk and data misuse potential.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The photo export flow downloads another user's Bumble profile photos via direct HTTP requests and writes them to a local directory without any user-facing warning, consent checkpoint, or retention controls. In a dating context this is especially sensitive because it facilitates bulk copying and offline storage of third-party personal images.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The code enumerates Beeline/likes data, which exposes who has liked the account and associated counts, despite this being more sensitive relationship-intelligence than ordinary messaging or session management. Because this is separate from the narrow operational need of resuming sessions or sending messages, it expands surveillance of third-party data and can bypass expected least-privilege boundaries for the skill.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · scripts/rbs_client.py (reported line 4)May include surrounding context.

python
#!/usr/bin/env python3
"""
Remote Browser Service (RBS) HTTP client.
Follows workspace/skills/remote-browser-service/SKILL.md.
"""

from __future__ import annotations

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The helper unconditionally sets precise latitude and longitude on the remote browser session, transmitting location data to the Remote Browser Service and influencing app behavior without an explicit consent gate at the point of use. In the context of a dating-app automation skill, location is especially sensitive because it can reveal or simulate presence in a specific area and affect matches, recommendations, and user privacy.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes a Bumble-specific skill for Bumble session/auth/matches/messages/profile-photo operations. This client script contains explicit conditional logic to operate against Tinder sessions and URLs, which is a separate dating service and not justified by the declared Bumble-only scope.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This code fetches remote page text, title, and URL and prints them to stdout, which can expose sensitive Bumble content such as messages, profile details, or account state in logs or downstream tooling. Because this skill is explicitly designed to inspect matches and messages, the page text may contain highly sensitive personal data, making indiscriminate retrieval and display more dangerous in this context.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The debug routine prints page text, interactive element names, and writes a screenshot to disk, which can capture private conversations, profile details, phone-auth screens, or other sensitive account state. Although clearly intended for troubleshooting, debug output broadens data exposure beyond normal user-facing actions and may leave sensitive artifacts on disk or in logs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The debug path saves a screenshot to disk without an explicit warning, which can silently persist sensitive dating-app content such as messages, identities, and profile details. The main risk is accidental privacy leakage through local files, backups, or shared workspaces rather than active exploitation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.