| Titel | Praat Praat commit b753a09ba0f4c2385735f08dacd2086088094d69 Out-of-bounds Write |
|---|
| Beschreibung | A vulnerability was found in Praat commit b753a09ba0f4c2385735f08dacd2086088094d69
and classified as high 7.8. Affected is the whisper_model_load function of the
vendored whisper.cpp model loader component (external/whispercpp/whisper.cpp:1874
and 1883-1887). The manipulation of the argument n_dims of a legacy-GGML Whisper
model tensor record leads to an out-of-bounds write on the stack. User interaction
is required because the victim must install a crafted community Whisper model file
into <preferences folder>/models/whispercpp/ (the location Praat's own dialog
instructs) and run the "Create SpeechRecognizer..." command on it.
Technical Details
- Affected file/function: external/whispercpp/whisper.cpp / whisper_model_load()
- Vulnerable parameter: int32 n_dims field of a per-tensor record, read raw from
the model file at whisper.cpp:1874 and used as the loop bound that writes
ne[n_dims] int32 values into the fixed four-element stack array
int32_t ne[4] (whisper.cpp:1883-1887); no range check exists anywhere in the
translation unit (upstream whisper.cpp added "if (n_dims < 0 || n_dims > 4)"
at its line 1894 - the vendored copy tracks ~v1.8.3 and never picked it up)
- Attack vector: Local (the model file typically arrives from a model-sharing
site, but the vulnerable operation is a local user opening a local file)
- Privileges required: None
- Trigger condition: a legacy .bin model whose tensor record declares
n_dims = 1024; AddressSanitizer reports stack-buffer-overflow, WRITE of size 4,
one byte past 'ne' (line 1883) at frame offset 2800 of whisper_model_load;
a negative control differing in exactly that one int32 produces zero
sanitizer reports. Memory corruption was demonstrated under AddressSanitizer
in an instrumented build; code execution was not demonstrated and the shipped
build keeps -fstack-protector-strong.
Impact
- Confidentiality: High (attacker-controlled stack write primitive)
- Integrity: High (attacker-chosen bytes written past the array)
- Availability: High (process aborts inside the loader)
CVSS v3.1
Score: 7.8 (High)
Vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Timeline
- Discovered: 2026-09-20
- Vendor notified: [pending]
- Patch released: [pending]
- Public disclosure: [pending]
Countermeasure
Add upstream's guard (if (n_dims < 0 || n_dims > 4) return false;) immediately
after read_safe(loader, n_dims) at whisper.cpp:1874, re-sync the vendored
external/whispercpp/ tree with current upstream whisper.cpp, and fix the same
unbounded pattern in the Silero VAD loader at whisper.cpp:5036-5050. Until
patched, do not install third-party .bin Whisper models into the Praat
preferences folder. |
|---|
| Quelle | ⚠️ https://github.com/praat/praat.github.io/issues/3348 |
|---|
| Benutzer | Dem00000 (UID 98563) |
|---|
| Einreichung | 29.09.2026 05:40 (vor 16 Tagen) |
|---|
| Moderieren | 14.10.2026 16:13 (15 days later) |
|---|
| Status | Akzeptiert |
|---|
| VulDB Eintrag | 419892 [Praat bis 7.0.02 Model Loader whisper.cpp whisper_model_load n_dims Pufferüberlauf] |
|---|
| Punkte | 20 |
|---|