Switch System Flaws: Difference between revisions
No edit summary |
|||
| (7 intermediate revisions by 3 users not shown) | |||
| Line 1,124: | Line 1,124: | ||
| June 6, 2025 | | June 6, 2025 | ||
| August 8, 2025 | | August 8, 2025 | ||
| Yannik | | [https://github.com/kinnay Yannik] | ||
|- | |- | ||
| [[LDN_services|ldn]] AdvertiseData OOB-memcpy with EncryptionType3 (AES-128-GCM) actionframes (ldnhax) | | [[LDN_services|ldn]] AdvertiseData OOB-memcpy with EncryptionType3 (AES-128-GCM) actionframes (ldnhax) | ||
| Line 1,167: | Line 1,167: | ||
| November 2021? | | November 2021? | ||
| November 26, 2025 | | November 26, 2025 | ||
| [[User:Yellows8|yellows8]] | |||
|- | |||
| [[Bluetooth_Driver_services|bluetooth]] BSA gatt_process_prep_write_rsp stack buffer overflow | |||
| BSA gatt_process_prep_write_rsp memcpys to stack without size validation (the input len param which is subtracted to determine the copy-size is also unvalidated). Triggering this is only possible if the system sent ATT_PREPARE_WRITE_REQ, and then received ATT_PREPARE_WRITE_RSP with a large size. | |||
The size used with memcpy is (u16)(insize-4), so when insize is less than 4 the copy size will be {negative value masked to u16}. This will therefore eventually crash when the stacktop is reached during memcpy. | |||
[15.0.0+] Paritially fixed due to corrected MTU handling (doesn't apply to negative-copysize). [21.0.0+] Fully fixed with proper size validation. | |||
| Stack buffer overflow in bluetooth-sysmodule when the required ATT messages are sent/received. | |||
| [[21.0.0]] | |||
| [[21.0.0]] | |||
| November 2021? | |||
| January 19, 2026 | |||
| [[User:Yellows8|yellows8]] | |||
|- | |||
| [[NFC_services|nfc]] Initialize buffer overflow | |||
| All Initialize* cmds for nn::nfc::detail::IUser (nfc:user), nn::nfc::detail::ISystem (nfc:sys), nn::nfp::detail::IUser (nfp:user), nn::nfp::detail::ISystem (nfp:sys), nn::nfp::detail::IDebug (nfp:dbg), nn::nfc::mifare::detail::IUser (nfc:mf:u): these copy the input array into _this, without validating the array count. | |||
The data is copied to obj_impl+0x8+0x28, with each entry being 0x20-bytes. The event handle returned by AttachAvailabilityChangeEvent is at obj_impl+0x8+0xB8+0x14 (Same with nfc/nfp interfaces). This therefore means +0xA4 in the input buffer will overwrite the handle returned by that cmd, allowing one to leak any handle with the specified value. This can be done with count=0x6. The object is large enough that this count will only overwrite data within the current object. However during the dtor it will use ptrs which were corrupted with this (located before the event), so one must avoid closing the session unless the input data included valid ptrs. | |||
This can be exploited by just using a 0xC0-byte (array_count=0x6) input buffer with Initialize where each u32 is the target nfc handle value, then using cmd GetAvailabilityChangeEventHandle to leak the handle. | |||
[22.0.0+] This was fixed by clamping the count to a maximum of 0x4. | |||
| OOB datacopy into object state. Allows leaking arbitary [[NFC_services|handles]], including on [S2] (such as process-handle, sm, fsp-srv (remaining services can also be used via sm)). | |||
| [[22.0.0]] | |||
| [[22.0.0]] | |||
| November 2021 | |||
| March 17, 2026 | |||
| [[User:Yellows8|yellows8]] | | [[User:Yellows8|yellows8]] | ||
|} | |} | ||
| Line 1,251: | Line 1,278: | ||
| January (?) 2022 | | January (?) 2022 | ||
| February 23, 2022 | | February 23, 2022 | ||
| [[User:Yellows8|yellows8]] | |||
|- | |||
| ぷよぷよ™テトリス®S (JPN Puyo Puyo Tetris) | |||
| The JPN Tetris game/demo can be used to launch the online-WebApplet. | |||
First, launch the offline-WebApplet for the manual: | |||
* Game: Main-menu -> press A with the already selected top menu button -> press the R button. | |||
* Demo: Main-menu -> select menu button on the right side -> press A. | |||
Then in the manual: | |||
* Press A -> select the bottom menu entry in the list. | |||
* Select the SEGA icon -> press A. | |||
This will then trigger launching the online-WebApplet with the plain-http <nowiki>"http://sega.jp/"</nowiki> URL. | |||
With game-update v1.1.3 the whitelist no longer allows plain-http. The plain-http links appear to have been changed to https. | |||
| 1.1.3 | |||
| 1.1.3 | |||
| 2017 | |||
| 2017 | |||
| [[User:Yellows8|yellows8]] | | [[User:Yellows8|yellows8]] | ||
|} | |} | ||
| Line 1,315: | Line 1,362: | ||
| December, 2022 | | December, 2022 | ||
| May, 2024 | | May, 2024 | ||
| Yannik | | [https://github.com/kinnay Yannik] | ||
|} | |} | ||
| Line 1,496: | Line 1,543: | ||
| Early April 2022 | | Early April 2022 | ||
| November 16, 2022 | | November 16, 2022 | ||
| [[User:Rambo6Glaz|Rambo6Glaz]], Yannik (massive RE help) | | [[User:Rambo6Glaz|Rambo6Glaz]], [https://github.com/kinnay Yannik] (massive RE help) | ||
|} | |} | ||
There's another one more interesting but it will have to wait a bit :) | There's another one more interesting but it will have to wait a bit :) | ||
== Games == | |||
{| class="wikitable" border="1" | |||
|- | |||
! Game | |||
! Summary | |||
! Description | |||
! Impact | |||
! Fixed in version | |||
! Timeframe this was discovered | |||
! Public disclosure timeframe | |||
! Discovered by | |||
|- | |||
| Mario Kart World | |||
| ASLR leak in application data | |||
| A memory address can be leaked by changing your username to something short, and hosting a network session in LAN mode (press L + R + Left Stick on the main menu to enable this). The memory address can be found in bytes 12 - 19 of the application data that is transmitted in response to a browse request. | |||
'''Note:''' there is more uninitialized data in the packet, but the memory address is probably the most interesting part. The vulnerability was fixed by clearing the application data with zeros, before filling in the information. | |||
[https://hackerone.com/reports/3463719 HackerOne report] | |||
This stack infoleak was also present in the [[LDN_services|ldn]] AdvertiseData. | |||
| A memory address can leaked (this is a requirement for many types of attacks). | |||
| 1.5.0 | |||
| December 12, 2025 | |||
| February 19, 2026 | |||
| [https://github.com/kinnay Yannik], yellows8 (ldn) | |||
|- | |||
| Splatoon 3 | |||
| Anticheat Seed Randomization Weakness | |||
| This oversight of seed generation would allow an attacker to quickly compute all code hashes, and modify game code, while still producing a valid ch1 hash. | |||
[https://hackerone.com/reports/3042475 HackerOne report] | |||
| Allows an attacker to bypass the ch1 anti-cheat hashing mechanism. | |||
| 10.0.0 | |||
| March 17, 2025 | |||
| February 19, 2026 | |||
| hana2736 | |||
|} | |||