# [3DS][SSL] Improper certificate validation allows an attacker to perform MitM attacks

Nintendo 3DS SSL module omitted the R_VERIFY_RES_SIGNATURE resource in RSA BSAFE MES, so certificate signatures were never checked, enabling MitM of any TLS connection.

- Payout: hidden
- Severity: none
- Program: Nintendo
- Found by: mrnbayoh
- Disclosed: 2020-12-18
- Write-up quality: 7/10
- Original: https://hackerone.com/reports/894922
- Library page: https://bugbountylibrary.com/r/h1%3A894922
- Tags: area:devices domain:network impact:data-leak impact:integrity kind:bounty platform:hackerone technique:source-review vuln:crypto vuln:misconfiguration

**Target:** SSL system module (RSA BSAFE MES) on Nintendo 3DS
**Root cause:** The SSL module's resource list passed to RSA BSAFE MES omits R_VERIFY_RES_SIGNATURE, so certificate chain signatures are never validated despite verification flags being set.
**Steps:**
1. Inspect the SSL system module's configuration of the RSA BSAFE MES library resource list.
2. Observe R_VERIFY_RES_SIGNATURE is absent from the list.
3. Generate a self-signed/forged certificate for a target host (e.g. NetUpdateSOAP).
4. Intercept the 3DS TLS connection and present the forged cert; the console accepts it and completes the handshake.
**How found:** Code/config review of the SSL module's RSA BSAFE MES resource list against library documentation, noting the missing signature-verification resource.
**Exploitation:** Attacker positions as MitM (e.g. rogue AP/DNS) and presents a forged certificate for any host; the 3DS accepts it, allowing spoofing of NIM update/eShop/Friends/ACT endpoints to capture tokens, NNID credentials, and transactions or serve fake update packages.
**Escalation:** Spoofing NetUpdateSOAP to bypass system update verification and deliver customized update packages; spoofing eShop/game servers to widen attack surface.
**Insight:** When a target bundles a configurable crypto library, diff the enabled 'resource'/feature list against the docs for security-critical flags like signature verification rather than trusting that a 'verify' flag implies full chain validation.

