T09 · Insecure Skill Coding Practices
- Location
runtime/src/inference/pipeline.py:302- Finding
Voice commands rely on speaker similarity without replay or spoof resistance
- Content
View full analysis
= 1.2 and speaker_match >= 85.0 and confidence >= 85.0 ) if ( failure_reason is None and vad_status == "ok" and (speech_duration >= 3.0 or short_high_confidence_override) and speaker_match >= 78.0 and confidence >= 80.0 and identity_score >= 82.0 ): decision = "allow_command" else: decision = "reject_command" ``` The available anti-spoofing component is disabled: ```python class AntiSpoofingDetector: """Anti-spoofing placeholder.""" def __init__( self, model_name: str = "rawnet2_asvspoof", device: str = "cpu", savedir: Optional[str] = None, ): self.device = device self.savedir = Path(savedir) if savedir else None self.classifier = None print("Anti-spoofing backend disabled: no local model assets configured") ``` ### Technical Analysis The command-gating decision uses speaker-embedding similarity, audio quality, estimated speech duration, and voice-activity metadata. It does not incorporate challenge-response authentication, replay detection, liveness verification, or a functioning synthetic-speech detector. Speaker recognition determines whether audio resembles an enrolled speaker, but it does not establish that the owner is currently present or intentionally issuing the command. A sufficiently clear recording or generated voice clone may therefore meet the same similarity and confidence thresholds as live speech. The short-sample override increases exposure by allowing samples as short as 1.2 seconds when similarity and confidence are high. The Skill documentation instructs downstream integrations to perm ...[truncated 1241 chars]- Remediation
View remediation
