The vulnerability stems from two key points:
- processData used child_process.exec - which executes commands via the system shell - with untrusted input.
- Command-generation functions concatenated user inputs into shell command strings without sanitization.
Though the CVE description mentions onSpeechDone, analysis of the commit diff shows:
- The critical fix replaced exec() with spawn() in processData
- Command-generation functions were modified to use parameterized arguments arrays
- onSpeechDone was a callback handler for command completion, not the execution point.
The root vulnerability was in the command construction/execution pattern, not the result handling.