T09 · Insecure Skill Coding Practices
- Location
api-spec.md:3- Finding
Unauthenticated Loopback API Exposes Reusable IoT Credentials with Wildcard CORS
- Content
View full analysis
/iot/info returns the LocalWeb account and password in plaintext. > If this server becomes externally accessible, the credentials will be exposed. --- ## Common Response Headers HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Access-Control-Allow-Origin: * Cache-Control: no-store ``` The `/iot/info` response is further documented as returning the reusable `user` and `password` values needed to authenticate directly to each Smart Station. ### Technical Analysis The service treats loopback binding as an authentication boundary, but binding to `127.0.0.1` only prevents direct connections from remote network hosts. It does not protect the service from: - Other processes running under the same host. - Compromised desktop applications, browser extensions, or local malware. - Sandboxed or lower-trust applications that retain loopback network access. - Browser content capable of issuing and reading localhost requests, subject to the browser's Private Network Access and mixed-content controls. The wildcard `Access-Control-Allow-Origin: *` policy increases browser-based exposure by allowing responses to be shared with any origin whenever the browser permits the request. Because `/iot/info` returns a reusable account and password without requiring authentication, any process that can connect to the loopback port can obtain credentials without first proving that it is the authorized Skill host. Th ...[truncated 2495 chars]- Remediation
View remediation
