ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Google ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»Π° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++ ΡΠΈΠΏΠ° MiraclePtr (raw_ptr<T>) Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π²ΡΠ·Π²Π°Π½Π½ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊ ΡΠΆΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄ΡΠ½Π½ΡΠΌ ΠΎΠ±Π»Π°ΡΡΡΠΌ ΠΏΠ°ΠΌΡΡΠΈ (use-after-free). MiraclePtr ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±Π²ΡΠ·ΠΊΡ Π½Π°Π΄ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ ΡΠ°Π±ΠΎΡΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄ΡΠ½Π½ΡΠΌ ΠΎΠ±Π»Π°ΡΡΡΠΌ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° MiraclePtr Π±ΡΠ»Π° Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ Windows ΠΈ Android Π² ΠΌΠ°Π΅ 2022 Π³ΠΎΠ΄Π° (Π² Chrome 102), Π° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ ChromeOS, Linux ΠΈ macOS Π² ΠΈΡΠ½Π΅ 2023 Π³ΠΎΠ΄Π°. ΠΠ°ΡΠΈΡΠ° Π½Π° Π±Π°Π·Π΅ MiraclePtr Π² Chrome ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΊΡΠΎΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ΅Π³ΠΎ Π·Π° ΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ (renderer).
ΠΠΎΡΠ»Π΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΎΡΡΡΡΠΎΠ² ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΡ ΠΈ Π°Π²Π°ΡΠΈΠΉΠ½ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡΡ ΡΠ°Π±ΠΎΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·Π±ΠΎΡΠ° ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΡ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠΎΠ² ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² fuzzing-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π±ΡΠ» ΡΠ΄Π΅Π»Π°Π½ Π²ΡΠ²ΠΎΠ΄, ΡΡΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ MiraclePtr ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΎ Π·Π°ΡΠΈΡΡ ΠΎΡ 57% ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΊΠ»Π°ΡΡΠ° use-after-free, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ MiraclePtr ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² callback-Π²ΡΠ·ΠΎΠ²ΠΎΠ². ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ, ΡΡΠΎ 5 ΠΈΠ· 6 Π²ΡΡΠ²Π»Π΅Π½Π½ΡΡ Π·Π° ΠΏΡΠΎΡΠ»ΡΠΉ Π³ΠΎΠ΄ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅ Chrome Π±ΡΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Ρ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΎΡΡΡΡΠΎΠ² ΠΎΠ± Π°Π²Π°ΡΠΈΠΉΠ½ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡΡ , ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ MiraclePtr.
Π¦Π΅Π½ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ MiraclePtr ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Ρ
ΡΠ°Π½ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ 4 Π±Π°ΠΉΡΠ° ΡΠΎ ΡΡΡΡΡΠΈΠΊΠΎΠΌ ΡΡΡΠ»ΠΎΠΊ. ΠΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΠΏΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ MiraclePtr ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° 5.5-8% Π² ΡΠ±ΠΎΡΠΊΠ°Ρ
Π΄Π»Ρ Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ ΠΈ Π½Π° 2% Π² Π²Π΅ΡΡΠΈΠΈ Π΄Π»Ρ Android. Π‘ΡΠ΅Π΄Π½Π΅Π΅ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ Π² 1-3%. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ MiraclePtr Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΠΈΠ΅ ΠΊ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π½ΠΎ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠ· Π²ΡΡΠ²Π»Π΅Π½Π½ΡΡ
ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΉ ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠ° Π½Π° 1.5% ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° Π² Chrome OS, Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ Π½Π° 1.5% ΠΎΡΠΊΡΡΡΠΈΠ΅ Π²ΠΊΠ»Π°Π΄ΠΎΠΊ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Android, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ Π²Π²ΠΎΠ΄Π° ΠΈΠ·-Π·Π° ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ (ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ Π½Π° 10% Π² 99-ΠΎΠΌ ΠΏΡΠΎΡΠ΅Π½ΡΠΈΠ»Π΅).
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru