CI/CD Takeover & Supply Chain Risk! $$$$ Bounty
好的,我现在需要帮用户总结这篇文章的内容,控制在100字以内,而且不需要特定的开头。首先,我得仔细阅读文章,理解主要内容。 文章讲的是Aditya Sunny在Linktree的Android应用中发现了一个strings.xml文件,里面包含了大量硬编码的生产密钥。这些密钥暴露了Linktree的整个移动基础设施,包括CI/CD管道、OTA更新、认证系统、加密密钥等。攻击者可以利用这些密钥进行供应链攻击、CI/CD接管、加密和身份验证系统的破坏,甚至可以推送恶意更新到所有用户设备上。 接下来,作者详细描述了漏洞的影响和利用步骤,并提到最初报告被拒绝为“不适用”,但经过申诉后被接受并获得奖励。最后,作者给出了修复建议和关键教训。 现在我要把这些内容浓缩到100字以内。首先确定主要信息:发现了strings.xml中的硬编码密钥,导致基础设施暴露,可能的攻击方式和后果,以及最终的结果。 然后组织语言:在Linktree Android应用中发现strings.xml文件包含大量生产密钥,暴露了整个移动基础设施,可能导致CI/CD接管、恶意OTA更新等严重后果。报告最初被拒绝但最终被接受并获得奖励。 检查字数是否在限制内,并确保没有使用特定的开头词。这样应该能满足用户的需求。 </think> Aditya Sunny在Linktree Android应用中发现strings.xml文件包含大量硬编码生产密钥,暴露了CI/CD管道、OTA更新、认证系统等关键服务。这些漏洞可能导致供应链攻击、CI/CD接管及数据泄露。报告最初被拒绝为“不适用”,但通过申诉最终被接受并获得奖励。 2026-4-9 07:51:6 Author: infosecwriteups.com(查看原文) 阅读量:10 收藏

Aditya Sunny

Author: Aditya Sunny | Follow on LinkedIn: @adityasunny06

Program: Linktree Bug Bounty (Bugcrowd) | Status: Accepted & Rewarded ✅ | Reward: $$$$ 💸

What if a single XML file buried inside a popular app contained the keys to compromise millions of users? That’s exactly what I found inside Linktree’s Android application — a strings.xml file packed with hardcoded production secrets that exposed their entire mobile infrastructure. From CI/CD pipeline takeover to OTA supply chain attacks — one file, total compromise. Let’s break it down.

Press enter or click to view image in full size

bug reported

🔍 What Happened?

During a security audit of the Linktree Android application, I decompiled the APK and examined the res/values/strings.xml file. What I found was alarming — dozens of hardcoded production secrets spanning nearly every critical service Linktree uses:

🔑 Codemagic CI/CD API Key — Full access to Linktree's internal build pipeline (Project: "Cerberus")

🚀 CodePush Production Deployment Keys — Ability to push malicious OTA updates directly to users, bypassing App Store/Play Store review

🔐 Auth0 Credentials — AUTH0_CLIENT_ID and AUTH0_DOMAIN exposing the identity/authentication layer

🔓 Encryption Passphrase — CRYPTO_PASSPHRASE hardcoded in plain text

📁 Filestack API Key + Signature — Read/write access to cloud storage with a signature valid until the year 2100!

💬 Intercom API Keys — Access to customer support infrastructure

📊 Analytics Keys — Full keys for Amplitude, Datadog, Statsig, and Stream

🐛 Shake Client Credentials — Bug reporting system access

🌐 Internal API Endpoints — ACCOUNT_ENDPOINT, GRAPHQL_ENDPOINT, MESH_URI

This wasn't just one leaked key — this was Linktree's entire mobile infrastructure served on a silver platter.

Press enter or click to view image in full size

bug rejected

🛠 Exploitation Steps

Step 1: Decompiled the Linktree Android APK and located res/values/strings.xml containing hardcoded production secrets.

Step 2: Extracted the Codemagic CI/CD API Key and authenticated against the Codemagic REST API:

curl -H "x-auth-token: [CODEMAGIC_API_TOKEN]" https://api.codemagic.io/apps

Step 3: The API response revealed full project access including:

  • Project Name: Cerberus
  • • GitHub Repository: blistco/cerberus (private repo path leaked!)
  • • User Rights: ["delete"] — administrative privileges confirmed
  • • Internal Developer Emails exposed
  • • Build Environment: mac_mini_m2 instances with direct App Store/Play Store publishing hooks

Step 4: Identified CodePush Production Deployment Keys for both Android and iOS:

<string name="CODEPUSH_ANDROID_PRODUCTION_DEPLOYMENT_KEY">4X19vITGaTpg80SD83k-2D59n0IZ89VHaYmoa...</string>
<string name="CODEPUSH_IOS_PRODUCTION_DEPLOYMENT_KEY">US7I0gpLR4rkwrC0YvT0ISaKVazh61...</string>

These keys allow an attacker to bypass App Store/Play Store reviews entirely and push malicious OTA (Over-the-Air) updates directly to every Linktree user's device. 💀

Step 5: Extracted Auth0 authentication credentials, internal API endpoints, and the encryption passphrase — providing a complete attack surface map of Linktree's backend.

Get Aditya Sunny’s stories in your inbox

Join Medium for free to get updates from this writer.

Remember me for faster sign in

Step 6: Verified Filestack persistent access — the hardcoded signature expires in 2100, granting a near-permanent window to read, upload, or overwrite files in Linktree's cloud storage buckets.

Press enter or click to view image in full size

bug accept with bounty

🔓 The Kill Chain — How It Escalates

Decompile APK → Extract strings.xml → Codemagic API Key → CI/CD Pipeline Access → Build Logs → MORE Secrets (AWS, Firebase, Keystore) → CodePush Keys → Push Malicious OTA Updates → MILLIONS OF USERS COMPROMISED 💀

Why This Is Catastrophic:

  1. Supply Chain Attack via CodePush — An attacker could push a malicious update to every Linktree user without going through app store review. Silent. Instant. Devastating.

2. CI/CD Pipeline Takeover — The Codemagic key provides access to the "Cerberus" project with mac_mini_m2 build instances that have direct publishing hooks to App Store and Play Store.

3. Identity & Encryption Compromise — Auth0 credentials + hardcoded CRYPTO_PASSPHRASE ("Problem Perhaps Guest Old Fire Flavor") means the authentication and encryption layers are both exposed.

4. 84-Year Persistent Access — The Filestack signature doesn't expire until 2100. That's not a vulnerability — that's a permanent backdoor.

5. Complete Infrastructure Mapping — Internal API endpoints (ACCOUNT_ENDPOINT, GRAPHQL_ENDPOINT, MESH_URI) give attackers a full blueprint of Linktree's backend architecture.

🥊 The Triage Battle — From "Not Applicable" to Accepted

Here's where it gets interesting. After submitting this report through Bugcrowd, the initial response was:

"After an initial review of your report, we were unable to identify an immediate security impact. As such, this has been marked as Not Applicable."

Not Applicable? For hardcoded production secrets exposing an entire mobile infrastructure? 😤

I wasn't going to let this slide. I submitted a detailed Request for Response with demonstrable proof of administrative API access with delete rights, evidence of supply chain attack vectors via CodePush deployment keys, complete enumeration of every exposed service, and a technical argument showing how combined impact constitutes a P1/Critical vulnerability.

The response? Bug accepted. Bounty awarded. 💰

Lesson for every bug bounty hunter: Never accept "Not Applicable" without fighting back. If your bug is real, prove it with impact.

📷 Proof of Concept

Step 1: Codemagic API Access Verification — Successfully authenticated using the leaked API key and retrieved internal project metadata, build configurations, and developer information.

Step 2: Administrative Rights Confirmed — The JSON response explicitly leaked Project Name (Cerberus), GitHub URL (blistco/cerberus), Rights (["delete"]), Internal Emails, and Build Infra (mac_mini_m2 with App Store/Play Store hooks).

Step 3: The strings.xml Treasure Trove — A single file containing keys for Codemagic, CodePush (Android + iOS), Auth0, Filestack, Intercom, Shake, Amplitude, Datadog, Statsig, Stream, and internal API endpoints.

🛡 Patch & Prevention

Root Cause: Mass hardcoding of production secrets in res/values/strings.xml — a file trivially accessible to anyone who decompiles the APK.

Recommended Fixes:

  1. Immediate Key Rotation — Revoke and rotate ALL exposed credentials (Codemagic, CodePush, Auth0, Filestack, Intercom, etc.)
  2. 2. Remove Hardcoded Secrets — Use the Android Keystore System or fetch keys dynamically from a secure backend
  3. 3. Secret Masking in CI/CD — Ensure build logs never print sensitive environment variables
  4. 4. Short-Lived Signatures — Replace the 84-year Filestack signature with short-lived, backend-generated tokens
  5. 5. Code Obfuscation — Implement ProGuard/R8 rules and consider runtime secret injection

⚡ Key Takeaways

🔑 One XML file can expose an entire company's infrastructure. strings.xml is the first place attackers look — if your secrets are there, you're already compromised.

🚀 CodePush keys are nuclear weapons in the wrong hands. They bypass app store reviews entirely — one leaked key means silent malicious updates to millions of users.

🥊 Never accept "Not Applicable" without a fight. My report was initially rejected. I pushed back with evidence and impact analysis. Result? Bug accepted and bounty awarded. Always advocate for your findings.

If you enjoyed this write-up, follow me on Medium and LinkedIn for more bug bounty stories, security research, and vulnerability deep-dives.

The next big bounty is hiding in plain sight — go find it. 🎯


文章来源: https://infosecwriteups.com/linktrees-entire-mobile-infrastructure-exposed-hardcoded-secrets-in-strings-xml-bb881b0a86d7?source=rss----7b722bfd1b8d---4
如有侵权请联系:admin#unsafe.sh