CVE-2025-62609: MLX has Wild Pointer Dereference in load_gguf()

Published Nov 21, 2025
·
Updated

Summary

Segmentation fault in mlx::core::loadgguf() when loading malicious GGUF files. Untrusted pointer from external gguflib library is dereferenced without validation, causing application crash.

Environment: - OS: Ubuntu 20.04.6 LTS - Compiler: Clang 19.1.7

Vulnerability

Location: mlx/io/gguf.cpp - Function extracttensordata() at lines 59-79 - Vulnerable memcpy at lines 64-67 - Called from loadarrays() at line 177

The Bug: cpp std::tuple<allocator::Buffer, Dtype> extracttensordata(gguftensor tensor) { std::optional<Dtype> equivalentdtype = gguftypetodtype(tensor->type); if (equivalentdtype.hasvalue()) { allocator::Buffer buffer = allocator::malloc(tensor->bsize); memcpy( buffer.rawptr(), tensor->weightsdata, // untrusted pointer from gguflib tensor->numweights equivalentdtype.value().size()); return {buffer, equivalentdtype.value()}; } // ... }

Possible Fix

cpp std::tuple<allocator::Buffer, Dtype> extracttensordata(gguftensor tensor) { std::optional<Dtype> equivalentdtype = gguftypetodtype(tensor->type); if (equivalentdtype.hasvalue()) { // FIX: Validate pointer if (!tensor->weightsdata) { throw std::runtimeerror("[loadgguf] NULL tensor data pointer"); }

allocator::Buffer buffer = allocator::malloc(tensor->bsize); memcpy( buffer.rawptr(), tensor->weightsdata, tensor->numweights equivalentdtype.value().size()); return {buffer, equivalentdtype.value()}; } // ... }

PoC

bash Install MLX pip install mlx

python3 -c "import mlx.core as mx; mx.load('exploit.gguf', format='gguf')"

Download the poc file there, or let me know how I can send it to you.

AddressSanitizer Output (with instrumented build): AddressSanitizer:DEADLYSIGNAL ================================================================= ==5855==ERROR: AddressSanitizer: SEGV on unknown address 0x7fc432f64bc0 (pc 0x7fc430841c12 bp 0x7ffc04847ab0 sp 0x7ffc04847268 T0) ==5855==The signal is caused by a READ memory access. #0 0x7fc430841c12 /build/glibc-B3wQXB/glibc-2.31/string/../sysdeps/x8664/multiarch/memmove-vec-unaligned-erms.S:312 #1 0x55aac829756b in asanmemcpy (/home/user1/mlx/fuzz/loadgguf/fuzzloadgguf+0x9ef56b) (BuildId: 57467f1ce96052757daeef4b04739be7f23c5f1f) #2 0x55aacaa6e8dc in mlx::core::extracttensordata(gguftensor) /home/user1/mlx/mlx/io/gguf.cpp:64:5 #3 0x55aacaa773fc in mlx::core::loadarraysabi:cxx11 /home/user1/mlx/mlx/io/gguf.cpp:226:35 #4 0x55aacaa782a9 in mlx::core::loadgguf(std::cxx11::basicstring<char, std::chartraits<char>, std::allocator<char>> const&, std::variant<std::monostate, mlx::core::Stream, mlx::core::Device>) /home/user1/mlx/mlx/io/gguf.cpp:250:17 #5 0x55aac82dc696 in LLVMFuzzerTestOneInput /home/user1/mlx/fuzz/loadgguf/fuzzloadgguf.cpp:49:19 #6 0x55aac81e25c6 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const, unsigned long) (/home/user1/mlx/fuzz/loadgguf/fuzzloadgguf+0x93a5c6) (BuildId: 57467f1ce96052757daeef4b04739be7f23c5f1f) #7 0x55aac81cc738 in fuzzer::RunOneTest(fuzzer::Fuzzer, char const, unsigned long) (/home/user1/mlx/fuzz/loadgguf/fuzzloadgguf+0x924738) (BuildId: 57467f1ce96052757daeef4b04739be7f23c5f1f) #8 0x55aac81d220a in fuzzer::FuzzerDriver(int, char, int ()(unsigned char const, unsigned long)) (/home/user1/mlx/fuzz/loadgguf/fuzzloadgguf+0x92a20a) (BuildId: 57467f1ce96052757daeef4b04739be7f23c5f1f) #9 0x55aac81fbb82 in main (/home/user1/mlx/fuzz/loadgguf/fuzzloadgguf+0x953b82) (BuildId: 57467f1ce96052757daeef4b04739be7f23c5f1f) #10 0x7fc4307aa082 in libcstartmain /build/glibc-B3wQXB/glibc-2.31/csu/../csu/libc-start.c:308:16 #11 0x55aac81c73ed in start (/home/user1/mlx/fuzz/loadgguf/fuzzloadgguf+0x91f3ed) (BuildId: 57467f1ce96052757daeef4b04739be7f23c5f1f)

==5855==Register values: rax = 0x0000502000000098 rbx = 0xfafafafa0000fa00 rcx = 0x00000a047fff8013 rdx = 0x0000000000000008 rdi = 0x0000502000000098 rsi = 0x00007fc432f64bc0 rbp = 0x00007ffc04847ab0 rsp = 0x00007ffc04847268 r8 = 0x00000a0400000013 r9 = 0x0000000000000000 r10 = 0x00000a0400000013 r11 = 0x0000000000000000 r12 = 0x00000a047fff8010 r13 = 0xffffffffffffffc7 r14 = 0x00007fc42dd00280 r15 = 0x00000ff885ba0050 AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV /build/glibc-B3wQXB/glibc-2.31/string/../sysdeps/x8664/multiarch/memmove-vec-unaligned-erms.S:312 ==5855==ABORTING

Impact

- Attack vector: Malicious GGUF file (model weights, typically from untrusted sources) - Affects: MLX users on all platforms who call the vulnerable method with unsanitized input. - Result: Segmentation fault (uncatchable by exception handlers)

--- Credits:

- Markiyan Melnyk (ARIMLABS) - Mykyta Mudryi (ARIMLABS) - Markiyan Chaklosh (ARIMLABS)

Other sources

MLX is an array framework for machine learning on Apple silicon. Prior to version 0.29.4, there is a segmentation fault in mlx::core::loadgguf() when loading malicious GGUF files. Untrusted pointer from external gguflib library is dereferenced without validation, causing application crash. This issue has been patched in version 0.29.4.

MITRE

Affected Software

2 affected componentsFixes available
pip/mlx<=0.29.3
0.29.4
Ml-explore Mlx<0.29.4

Event History

Nov 21, 2025
Advisory Published
via GitHub·06:03 PM
Data Sourced
via GitHub·06:03 PM
DescriptionWeaknessAffected Software
CVE Published
via MITRE·06:57 PM
Data Sourced
via MITRE·06:57 PM
DescriptionWeakness
Data Sourced
via NVD·07:16 PM
DescriptionSeverityWeaknessAffected Software
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of CVE-2025-62609?

CVE-2025-62609 is classified as a high severity vulnerability due to the potential for a denial of service through application crashes.

2

How do I fix CVE-2025-62609?

To mitigate CVE-2025-62609, update the mlx package to version 0.29.4 or later.

3

What impact does CVE-2025-62609 have on affected systems?

CVE-2025-62609 can cause a segmentation fault, leading to application crashes when processing untrusted GGUF files.

4

Which versions of the mlx package are affected by CVE-2025-62609?

CVE-2025-62609 affects mlx versions up to and including 0.29.3.

5

Is there a workaround for CVE-2025-62609?

The most effective workaround for CVE-2025-62609 is to avoid using untrusted GGUF files until the mlx package is updated.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203