T05 · Unauthorized Access and Privilege Escalation
- Location
SKILL.md:10- Finding
Unrestricted Access to Local Identity and Payment Credential Files
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is openly built to make online purchases, but it handles raw payment credentials and uses broad browser-control techniques in payment pages without enough scoping or safeguards.
Review carefully before installing. This skill should not be used with live payment cards unless you are comfortable giving the agent reusable card details and direct browser control over checkout frames. Prefer a version that uses tokenized or hosted payment, requires explicit approval before reading any private file, shows the final merchant/amount/address before payment, and removes hardcoded card data.
SKILL.md:10Unrestricted Access to Local Identity and Payment Credential Files
references/cdp-click.md:1Cross-Origin Payment Controls Bypassed Through Unrestricted Chrome DevTools Protocol Access
references/cdp-click.md:154Plaintext Payment-Card Number, Expiration Date, and CVC Embedded in Documentation
references/cdp-click.md:144Payment Data Injected into CDP Targets Selected by Weak URL Substring Matching
The code directly inputs card number, expiry, and CVC into Stripe fields, including hard-coded example values and instructions to read card data from private storage. In an unknown-purpose skill, this is a highly sensitive financial capability that could be used to process unauthorized transactions or facilitate payment credential misuse.
The skill instructs the agent to read sensitive local files containing recipient details and payment card data, but it does not present a clear warning or obtain explicit user consent for that access. Because these files contain high-value PII and financial data, silent access creates a substantial privacy and security risk even before any purchase is completed.
The skill directs the agent to use CDP WebSocket access and synthetic mouse events to interact with cross-origin payment iframes, effectively bypassing normal browser-tool restrictions. This is especially dangerous in a payment context because it enables automation of sensitive checkout actions without transparent, user-visible safeguards and expands the attack surface around payment credential handling.
The document explicitly describes bypassing same-origin protections by attaching to cross-origin iframe targets over CDP and dispatching input into payment frames. That materially expands an agent’s ability to interact with third-party payment contexts in ways normal browser automation intentionally forbids, enabling unauthorized purchase flows, payment confirmation clicks, and abuse of trusted checkout surfaces.
The skill automates entry of highly sensitive financial data without warnings, consent requirements, masking expectations, or storage/handling constraints. Even if intended for testing, presenting this as routine automation normalizes unsafe handling of cardholder data and increases the chance of misuse or accidental exposure.
The trigger phrases are broad enough to activate on common shopping-related requests, which can cause the skill to engage high-risk behaviors such as reading local PII files and initiating purchases with insufficiently explicit intent. In a payment-capable skill, overbroad activation materially increases the chance of unintended data access or transaction flow initiation.
The skill claims user information is never shared with third parties, but its documented payment flow explicitly routes payment through third-party processors such as Klarna, Stripe, or Adyen. This creates a misleading privacy guarantee that could cause users to consent without understanding where their personal and payment-related data is actually sent.
The instructions target a button labeled "Betala köp" and assume a Swedish-language Klarna flow, but the document does not state that the skill is Swedish-locale-specific or provide an opt-in or alternative for other languages. This creates a natural-language locale constraint that is undocumented and effectively forced.
Code issues a request to a loopback, link-local, or private-range host. This can reach internal services not meant to be exposed and is a common SSRF pivot.
import urllib.request
# 1. Click "Betala köp" inside the Klarna iframe
tabs = json.loads(urllib.request.urlopen('http://127.0.0.1:18800/json').read())
kustom = next(t for t in tabs if 'kustom' in t.get('url','') and 'template' in t.get('url',''))
s = ws_connect(kustom['id'])
Code issues a request to a loopback, link-local, or private-range host. This can reach internal services not meant to be exposed and is a common SSRF pivot.
import urllib.request
# 1. Click "Betala köp" inside the Klarna iframe
tabs = json.loads(urllib.request.urlopen('http://127.0.0.1:18800/json').read())
kustom = next(t for t in tabs if 'kustom' in t.get('url','') and 'template' in t.get('url',''))
s = ws_connect(kustom['id'])
Code issues a request to a loopback, link-local, or private-range host. This can reach internal services not meant to be exposed and is a common SSRF pivot.
import urllib.request
# 1. Click "Betala köp" inside the Klarna iframe
tabs = json.loads(urllib.request.urlopen('http://127.0.0.1:18800/json').read())
kustom = next(t for t in tabs if 'kustom' in t.get('url','') and 'template' in t.get('url',''))
s = ws_connect(kustom['id'])
The instruction references a fixed path ~/Private/用户个人信息.txt, which assumes a particular filename and language convention. The file does not indicate that users can choose or configure their preferred language or locale for such resources, creating a mild language-policy concern.
No suspicious patterns detected.