{"id":8051,"date":"2015-12-20T15:16:51","date_gmt":"2015-12-20T14:16:51","guid":{"rendered":"https:\/\/www.customprotocol.com\/?post_type=it_programmation&amp;p=8051"},"modified":"2015-12-20T15:16:51","modified_gmt":"2015-12-20T14:16:51","slug":"ps4-explications-cturt-sur-exploit-kernel","status":"publish","type":"it_programmation","link":"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/","title":{"rendered":"[PS4] Les explications de CTurt sur son exploit kernel"},"content":{"rendered":"<p style=\"text-align: justify;\"><a href=\"https:\/\/www.customprotocol.com\/underground\/ps4-cturt-livre-details-exploit-kernel-quitte-scene\/\" target=\"_blank\" rel=\"noopener noreferrer\">Malgr\u00e9 le d\u00e9part tragique de <em>CTurt<\/em><\/a>, tout espoir n'est pas encore perdu pour la sc\u00e8ne du <strong>hack PS4<\/strong>. En effet, le d\u00e9veloppeur a partag\u00e9 r\u00e9cemment des <a href=\"http:\/\/cturt.github.io\/ps4-3.html\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>explications tr\u00e8s d\u00e9taill\u00e9es<\/strong> de ses recherches<\/a> sur le noyau de la console et sur son fameux <strong>exploit kernel<\/strong> pour <em>firmwarae<\/em> 1.76. Voil\u00e0 les bases qu'il faut conna\u00eetre avant d'aller lire les (longs) billets de notre cher camarade.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.customprotocol.com\/medias\/2015\/12\/Exploit-kernel-PS4-CTurt-explications.png\" rel=\"attachment wp-att-8052\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8052\" src=\"https:\/\/www.customprotocol.com\/medias\/2015\/12\/Exploit-kernel-PS4-CTurt-explications.png\" alt=\"Exploit kernel PS4 CTurt explications\" width=\"768\" height=\"432\" srcset=\"https:\/\/www.customprotocol.com\/medias\/2015\/12\/Exploit-kernel-PS4-CTurt-explications.png 768w, https:\/\/www.customprotocol.com\/medias\/2015\/12\/Exploit-kernel-PS4-CTurt-explications-300x169.png 300w, https:\/\/www.customprotocol.com\/medias\/2015\/12\/Exploit-kernel-PS4-CTurt-explications-370x208.png 370w, https:\/\/www.customprotocol.com\/medias\/2015\/12\/Exploit-kernel-PS4-CTurt-explications-270x152.png 270w, https:\/\/www.customprotocol.com\/medias\/2015\/12\/Exploit-kernel-PS4-CTurt-explications-570x321.png 570w, https:\/\/www.customprotocol.com\/medias\/2015\/12\/Exploit-kernel-PS4-CTurt-explications-740x416.png 740w, https:\/\/www.customprotocol.com\/medias\/2015\/12\/Exploit-kernel-PS4-CTurt-explications-300x169@2x.png 600w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><\/p>\n<hr \/>\n<p style=\"text-align: justify;\">L'<strong>exploit kernel<\/strong> se repose en fait sur un acc\u00e8s au compilateur JIT (<em><a href=\"https:\/\/fr.wikipedia.org\/wiki\/Juste-%C3%A0-temps\" target=\"_blank\" rel=\"noopener noreferrer\">Just-in-time<\/a><\/em>) pour ex\u00e9cuter du code via <em>WebKit<\/em>, puis utilise la vuln\u00e9rabilit\u00e9 <em><a href=\"http:\/\/seclists.org\/oss-sec\/2015\/q3\/66\" target=\"_blank\" rel=\"noopener noreferrer\">BadIRET<\/a><\/em> (Linux)\/<em>FreeBSD<\/em> afin de parvenir \u00e0 ses fins&nbsp;: se frayer un passage vers le noyau. C'est un tr\u00e8s court r\u00e9sum\u00e9 de tout le processus bien plus complexe, qui implique en r\u00e9alit\u00e9 des tas de manipulations issus de votre bo\u00eete \u00e0 outils cr\u00e9\u00e9e via r\u00e9tro-ing\u00e9nierie, incluant par exemple une corruption des pointeurs du <em>kernel<\/em> ou une luge sans op\u00e9rations (plus commun\u00e9ment appel\u00e9e <em>NOP sled<\/em>).<\/p>\n<p style=\"text-align: justify;\">Pour en revenir au compilateur JIT&nbsp;: il est utilis\u00e9 par le noyau <em>javascript<\/em> de <em>WebKit <\/em>et c'est lui qui permet de compiler dynamiquement du code en <em>javascript<\/em>, par soucis de performance contrairement aux interpr\u00e9teurs tels que le <a href=\"https:\/\/www.customprotocol.com\/underground\/ps4-portage-de-cinoop-lemulateur-gameboy-multi-plates-formes\/\" target=\"_blank\" rel=\"noopener noreferrer\">portage de l'\u00e9mulateur GBA <em>Cinoop<\/em> sur PS4<\/a>, que <em>CTurt<\/em> avait montr\u00e9 en septembre dernier. Pour ce faire, il faut donc une zone de m\u00e9moire \u00e0 la fois accessible et \u00e9criture et en ex\u00e9cution.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.customprotocol.com\/medias\/2015\/12\/PS4-depart-CTurt-details-exploit-kernel.png\" rel=\"attachment wp-att-8025\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8025 size-medium\" src=\"https:\/\/www.customprotocol.com\/medias\/2015\/12\/PS4-depart-CTurt-details-exploit-kernel-500x282.png\" alt=\"PS4 d\u00e9part CTurt d\u00e9tails exploit kernel\" width=\"500\" height=\"282\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><em>Sony<\/em> s'est charg\u00e9 de cela en cr\u00e9ant 2 fonctions d'<a href=\"https:\/\/fr.wikipedia.org\/wiki\/Appel_syst%C3%A8me\" target=\"_blank\" rel=\"noopener noreferrer\">appel syst\u00e8me<\/a>&nbsp;: <em>sys_jitshm_create<\/em> et <em>sys_jitshm_alias<\/em>. Il est possible de les utiliser directement, ou bien d'utiliser les enveloppes dans le <em>libkernel<\/em> (<em>sceKernelJitCreateSharedMemory et al.<\/em>). Pour identifier exactement la mani\u00e8re dont sont utilis\u00e9es ces fonctions, il faudra charger, <em>dumper<\/em> et <em>reverser<\/em> le <em>libSceJitBridge.sprx<\/em>.<\/p>\n<p style=\"text-align: justify;\">L'id\u00e9e de base, c'est qu'il n'y a aucun moyen de cartographier directement une page virtuelle RWX (droits de lecture, \u00e9criture et ex\u00e9cution). Au lieu de faire cela, on va donc avoir besoin d'allouer de la m\u00e9moire et de cr\u00e9er un <em><a href=\"https:\/\/fr.wikipedia.org\/wiki\/Alias_%28informatique%29\" target=\"_blank\" rel=\"noopener noreferrer\">alias<\/a><\/em> de cette cartographie. On va cartographier le premier <em>handle <\/em>comme un RX (droits de lecture et ex\u00e9cution), et l'<em>alias<\/em> comme un RW (droits de lecture et d'\u00e9criture). R\u00e9sultat&nbsp;: on aura deux applications virtuelles s\u00e9par\u00e9es qui pointeront vers la m\u00eame m\u00e9moire physique.<\/p>\n<p style=\"text-align: justify;\">Le code peut maintenant \u00eatre \u00e9crit par le biais du RW cartographi\u00e9 et ex\u00e9cut\u00e9 \u00e0 partir du RX cartographi\u00e9 de cette fa\u00e7on&nbsp;:<\/p>\n<pre class=\"lang:default decode:true\">unsigned char loop[]&nbsp;=&nbsp;{ 0xeb, 0xfe };\nmemcpy(writableAddress, loop, sizeof(loop));\n\n((void (*)())executableAddress)();<\/pre>\n<p style=\"text-align: justify;\">La cha\u00eene <em>ROP<\/em> li\u00e9e \u00e0 la m\u00e9moire de configuration (<em>setup memory<\/em>), copie le <em>Wi-Fi Loader<\/em>, et l'ex\u00e9cute. Vu que c'est un peu trop long pour \u00eatre fait en une seule \u00e9tape, on doit donc stocker l'\u00e9tape dans un <em>cookie<\/em>, et recharger la page apr\u00e8s chaque \u00e9tape pour d\u00e9marrer la suivante&nbsp;:<\/p>\n<pre class=\"lang:default decode:true\">var codeExecutionStage&nbsp;=&nbsp;getCookie(\"codeExecutionStage\");\nif(codeExecutionStage == \"1\") {\n\tallocateSharedMemory();\n\tdocument.getElementById(\"codeExecutionStage\").innerHTML&nbsp;=&nbsp;\"Stage: Mapping shared memory...\";\n\tsetTimeout(function() { document.cookie&nbsp;=&nbsp;\"codeExecutionStage=2\"; location.reload(); }, 10);\n}\nelse if(codeExecutionStage == \"2\") {\n\tmapSharedMemory();\n\tdocument.getElementById(\"codeExecutionStage\").innerHTML&nbsp;=&nbsp;\"Stage: Waiting for payload...\";\n\tsetTimeout(function() { document.cookie&nbsp;=&nbsp;\"codeExecutionStage=3\"; location.reload(); }, 10);\n}\nelse if(codeExecutionStage == \"3\") {\n\tpayload();\n\tdocument.getElementById(\"codeExecutionStage\").innerHTML&nbsp;=&nbsp;\"Stage: Executing...\";\n\tsetTimeout(function() { document.cookie&nbsp;=&nbsp;\"codeExecutionStage=4\"; location.reload(); }, 10);\n}\nelse if(codeExecutionStage == \"4\") {\n\tcopy();\n\tdocument.getElementById(\"codeExecutionStage\").innerHTML&nbsp;=&nbsp;\"Stage: Done!\";\n\tsetTimeout(function() { document.cookie&nbsp;=&nbsp;\"codeExecutionStage=0\"; location.reload(); }, 10);\n}<\/pre>\n<p style=\"text-align: justify;\">Vu qu'on utilise simplement les appels syst\u00e8me <em>JIT<\/em> vers leur destination d\u00e9finie, il s'agit davantage d'une astuce que d'un <strong>exploit<\/strong>. Malheureusement, tr\u00e8s peu d'applications ont acc\u00e8s \u00e0 ce fameux compilateur, <em>Sony<\/em> ayant ajout\u00e9 des contr\u00f4les de privil\u00e8ges dans le <em>kernel<\/em>. Ainsi, seuls les processus qui passent ces contr\u00f4les peuvent y avoir acc\u00e8s. Tant que l'on ne trouvera pas d'autre fa\u00e7on d'ex\u00e9cuter du code non-sign\u00e9, nos <strong>exploits<\/strong> via des jeux ou des applis <em>web<\/em> resteront cantonn\u00e9s au <em>ROP<\/em>...<\/p>\n<p style=\"text-align: justify;\"><div align=\"justify\" class=\"signoff\"><i class=\"fa fa-fw fa-folder-open\"><\/i>Lire la <a href=\"http:\/\/cturt.github.io\/ps4-3.html\" target=\"_blank\" rel=\"noopener noreferrer\">suite de ces explications (en anglais) sur le blog\u00a0<em>GitHub<\/em> de CTurt<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Voici quelques brefs \u00e9claircissements en fran\u00e7ais des explications d\u00e9taill\u00e9es de CTurt (en anglais).<\/p>\n","protected":false},"author":481,"featured_media":8052,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"categories":[586,454],"tags":[],"programmation-categorie":[621],"class_list":["post-8051","it_programmation","type-it_programmation","status-publish","format-standard","has-post-thumbnail","hentry","category-news-programmation","category-programmation","programmation_categorie-explications"],"yoast_head":"\n<title>[PS4] Les explications de CTurt sur son exploit kernel - CTP<\/title>\n<meta name=\"description\" content=\"Voici quelques brefs \u00e9claircissements en fran\u00e7ais des explications d\u00e9taill\u00e9es de CTurt (en anglais).\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/\" \/>\n<meta property=\"og:locale\" content=\"fr_CA\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[PS4] Les explications de CTurt sur son exploit kernel - CTP\" \/>\n<meta property=\"og:description\" content=\"Voici quelques brefs \u00e9claircissements en fran\u00e7ais des explications d\u00e9taill\u00e9es de CTurt (en anglais).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/\" \/>\n<meta property=\"og:site_name\" content=\"Custom Protocol\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.customprotocol.com\/medias\/2015\/12\/Exploit-kernel-PS4-CTurt-explications.png\" \/>\n\t<meta property=\"og:image:width\" content=\"768\" \/>\n\t<meta property=\"og:image:height\" content=\"432\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimation du temps de lecture\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/\",\"url\":\"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/\",\"name\":\"[PS4] Les explications de CTurt sur son exploit kernel - CTP\",\"isPartOf\":{\"@id\":\"https:\/\/www.customprotocol.com\/#website\"},\"datePublished\":\"2015-12-20T14:16:51+00:00\",\"dateModified\":\"2015-12-20T14:16:51+00:00\",\"description\":\"Voici quelques brefs \u00e9claircissements en fran\u00e7ais des explications d\u00e9taill\u00e9es de CTurt (en anglais).\",\"breadcrumb\":{\"@id\":\"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/#breadcrumb\"},\"inLanguage\":\"fr-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.customprotocol.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programmation\",\"item\":\"https:\/\/www.customprotocol.com\/programmation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"[PS4] Les explications de CTurt sur son exploit kernel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.customprotocol.com\/#website\",\"url\":\"https:\/\/www.customprotocol.com\/\",\"name\":\"Custom Protocol\",\"description\":\"Site d&#039;hack-tualit\u00e9 et de tutoriels sur la customisation de consoles et appareils (homebrews, plugins, \u00e9mulation...)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.customprotocol.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-CA\"}]}<\/script>\n","yoast_head_json":{"title":"[PS4] Les explications de CTurt sur son exploit kernel - CTP","description":"Voici quelques brefs \u00e9claircissements en fran\u00e7ais des explications d\u00e9taill\u00e9es de CTurt (en anglais).","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/","og_locale":"fr_CA","og_type":"article","og_title":"[PS4] Les explications de CTurt sur son exploit kernel - CTP","og_description":"Voici quelques brefs \u00e9claircissements en fran\u00e7ais des explications d\u00e9taill\u00e9es de CTurt (en anglais).","og_url":"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/","og_site_name":"Custom Protocol","og_image":[{"width":768,"height":432,"url":"https:\/\/www.customprotocol.com\/medias\/2015\/12\/Exploit-kernel-PS4-CTurt-explications.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimation du temps de lecture":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/","url":"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/","name":"[PS4] Les explications de CTurt sur son exploit kernel - CTP","isPartOf":{"@id":"https:\/\/www.customprotocol.com\/#website"},"datePublished":"2015-12-20T14:16:51+00:00","dateModified":"2015-12-20T14:16:51+00:00","description":"Voici quelques brefs \u00e9claircissements en fran\u00e7ais des explications d\u00e9taill\u00e9es de CTurt (en anglais).","breadcrumb":{"@id":"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/#breadcrumb"},"inLanguage":"fr-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.customprotocol.com\/programmation\/ps4-explications-cturt-sur-exploit-kernel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.customprotocol.com\/"},{"@type":"ListItem","position":2,"name":"Programmation","item":"https:\/\/www.customprotocol.com\/programmation\/"},{"@type":"ListItem","position":3,"name":"[PS4] Les explications de CTurt sur son exploit kernel"}]},{"@type":"WebSite","@id":"https:\/\/www.customprotocol.com\/#website","url":"https:\/\/www.customprotocol.com\/","name":"Custom Protocol","description":"Site d&#039;hack-tualit\u00e9 et de tutoriels sur la customisation de consoles et appareils (homebrews, plugins, \u00e9mulation...)","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.customprotocol.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-CA"}]}},"_links":{"self":[{"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/programmation\/8051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/programmation"}],"about":[{"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/types\/it_programmation"}],"author":[{"embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/users\/481"}],"replies":[{"embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/comments?post=8051"}],"version-history":[{"count":0,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/programmation\/8051\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/media\/8052"}],"wp:attachment":[{"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/media?parent=8051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/categories?post=8051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/tags?post=8051"},{"taxonomy":"programmation_categorie","embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/programmation-categorie?post=8051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}