Secure every application with flexible pentesting that combines expert-led testing, autonomous validation, and actionable results
Learn moreIdentify exploitable risk across external networks, internal infrastructure, and cloud environments
Learn moreExtend your offensive security program with specialized assessments, adversarial testing, code review, and program-level support
Learn moreYour mobile apps ship to your customers' devices and run on platforms you don't control. That is exactly where attackers meet them, and where typical web-oriented pentesting comes up short. More than 75% of published apps ship with at least one security vulnerability.
When a mobile app is compromised, three things are at risk at once: your backend and the web servers, billing systems, and PII behind it; your users and the payment and personal data on their phones; and your reputation as the app's publisher.
Source: ASEE, mobile app security statistics.
Cobalt tests mobile applications the way an attacker would, on real devices, against platform-specific controls. We follow our industry-leading methodology informed by OWASP MASVS. Human-led testing goes where automation cannot, while AI accelerates the work so pentesters spend their time on exploitation.
Mobile applications should never embed privileged API credentials within client-side code, as application packages can be extracted and reverse engineered by anyone. Secrets included within mobile application bundles should be considered publicly accessible and must not provide privileged access to backend services.
During testing, the iOS application was found to embed a third-party support platform API key within the React Native JavaScript bundle (main.jsbundle). By extracting the IPA package and inspecting the bundle, the API key was recovered in plaintext without requiring authentication, jailbreaking, or interaction with the production infrastructure.
Further validation confirmed that the exposed API key remained active and granted extensive access to the associated support platform environment. Using the credential, it was possible to enumerate support tickets, retrieve requester information, access ticket conversations, perform targeted ticket lookups using email addresses, and create new support tickets using arbitrary requester identities.
The assessment was limited to read-only operations and the creation of a single authorized test ticket. No production tickets were modified or deleted. Embedding a privileged API credential within a publicly distributed application exposes sensitive customer information and significantly increases the risk of unauthorized access to the organization's support infrastructure.
/api/v2/tickets, /api/v2/search/tickets, /api/v2/tickets/{id}/conversations, /api/v2/tickets?email={victim_email} — support platform API endpointsPayload/[application].app/main.jsbundle — React Native bundle containing the hardcoded credentialStep 1: Extract the API Key
Extract the IPA file and navigate to Payload/[application].app/main.jsbundle. Open the bundle using a text editor and search for the support platform API key embedded within the JavaScript bundle.
Step 2: Verify Unauthorized Read Access
Use the extracted API key to query the support platform Search API:
curl -s -u "<REDACTED_API_KEY>:X" -G \ --data-urlencode "query=\"created_at>'2020-01-01'\"" \ "https://[support-platform-domain]/api/v2/search/tickets" | jq '.total'The API returns the total number of accessible support tickets, confirming unauthorized access to the support environment.
Step 3: Verify Access to Customer Information
Retrieve ticket data and requester information:
curl -s -u "<REDACTED_API_KEY>:X" \ "https://[support-platform-domain]/api/v2/tickets?per_page=20&include=requester"Perform targeted lookups by requester email:
curl -s -u "<REDACTED_API_KEY>:X" \ "https://[support-platform-domain]/api/v2/tickets?email=<REDACTED_EMAIL>"The API returns customer names, email addresses, phone numbers, ticket history, and associated conversations.
Step 4: Verify Unauthorized Write Access
Create an authorized test ticket using the exposed API key:
curl -X POST -u "<REDACTED_API_KEY>:X" \ -H "Content-Type: application/json" \ -d '{ "description": "Authorized pentest ticket - please delete", "subject": "Pentest - DO NOT ACTION", "email": "<TESTER_EMAIL>", "priority": 1, "status": 2 }' \ "https://[support-platform-domain]/api/v2/tickets"The API returns HTTP 201 Created. The test ticket appears within the support portal, confirming unauthorized write access.
An attacker can extract the embedded API key from the publicly distributed iOS application and authenticate directly to the support platform API. Successful exploitation allows an attacker to read support tickets, retrieve requester names and contact information, access ticket conversations and support history, perform targeted searches for customer records, create fraudulent support tickets, abuse trusted support workflows, and conduct phishing or social engineering campaigns.
Because the exposed credential provides both read and write access, compromise of the API key poses significant risk to the confidentiality and integrity of the support platform.
A Cobalt mobile app pentest closes the visibility gap with more than a methodology. You get elite specialists, an AI-powered platform, and findings that move straight into your workflow, all delivered through the Cobalt Offensive Security Platform.
Mobile apps share APIs, authentication flows, and infrastructure with the rest of your environment. Test them together to close the gaps attackers exploit between systems.
Secure your iOS and Android apps with platform-specific, human-led pentesting from the Cobalt Core.