<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Комментарии к публикации «Technical analysis of the checkm8 exploit»]]></title>
    <link>https://habr.com/en/companies/dsec/articles/472762/</link>
    <description><![CDATA[Комментарии к публикации «Technical analysis of the checkm8 exploit»]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Mon, 04 May 2026 13:29:53 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      

      
        
  
    <item>
      <title>28.10.2019 19:10:49 kotlyarenkodmitry</title>
      <guid isPermaLink="true">https://habr.com/en/companies/dsec/articles/472762/#comment_20816328</guid>
      <link>https://habr.com/en/companies/dsec/articles/472762/#comment_20816328</link>
      <description><![CDATA[Nice work! Thanks for this article, very informative and valuable.]]></description>
      <pubDate>Mon, 28 Oct 2019 19:10:49 GMT</pubDate>
      <dc:creator><![CDATA[kotlyarenkodmitry]]></dc:creator>
    </item>
  

  
    <item>
      <title>28.10.2019 11:35:46 a1exdandy</title>
      <guid isPermaLink="true">https://habr.com/en/companies/dsec/articles/472762/#comment_20813802</guid>
      <link>https://habr.com/en/companies/dsec/articles/472762/#comment_20813802</link>
      <description><![CDATA[<p>Thank you for your reply and good question!</p><br>
<p>1) <code>stall</code> is needed to create an incomplete USB transaction. You are right – this is necessary to prevent request completion, as a result of which you can create a request queue. The delay does not matter. Further requests can be executed even with a sufficiently long pause after the stall (for example, 10 seconds). In fact, the USB bus does not go into the <code>STALL</code> state (the <code>STALL</code> handshake packets are not sent, only <code>NACK</code>). At the same time, the controller is working in such a way that it always processes <code>SETUP</code> packets, which is why it is possible to create a request queue.</p><br>
<p>2) No additional requests are needed. As it turned out, in the presented version of the exploit, even a single <code>stall</code> request is enough – it will be overwritten with new <code>"callback"</code> and <code>"next"</code> values. Apparently, this is possible because before overflowing while executing the <code>USB_REQ_SET_CONFIGURATION</code> request (<code>libusb1_no_error_ctrl_transfer(device, 0, 9, 0, 0, t8010_overwrite, 50)</code>), another request will be created and it will remain in the heap (see SecureROM sources). It will play the role of a heap barrier and will prevent access to corrupted metadata of an overflowed request during further work with the heap. If you use a request from the original code (<code>libusb1_no_error_ctrl_transfer(device, 0, 0, 0, 0, t8010_overwrite, 50)</code>), then the second request is needed as a heap barrier.</p>]]></description>
      <pubDate>Mon, 28 Oct 2019 11:35:46 GMT</pubDate>
      <dc:creator><![CDATA[a1exdandy]]></dc:creator>
    </item>
  

  
    <item>
      <title>27.10.2019 21:02:29 anonman</title>
      <guid isPermaLink="true">https://habr.com/en/companies/dsec/articles/472762/#comment_20811554</guid>
      <link>https://habr.com/en/companies/dsec/articles/472762/#comment_20811554</link>
      <description><![CDATA[1) What exactly does the stall do?<br>
<br>
<ul>
<li>It seems to prevent the io requests on the execution queue from being completed, providing enough time to add any number of them before the usb bus is reset. This is implied but not said explicitly.</li>
<li>How can the USB bus be «stalled» but still receive additional setup packets and data from later USB packets from the host?</li>
</ul><br>
<br>
2) It seems you added an extra usb_leak() to the end before sending the overwrite payload. Is there a purpose of the extra send?<br>
<ul>
<li> It seems likely no. If I have interpreted your analysis correctly, there would then be three io_requests on the heap after the io_buffer rather than two in the original checkm8, right? One fo th stall and then two more for the two usb_leak calls.</li>
</ul><br>
<br>
Thanks so much for this. Great post. You guys did some excellent work here.]]></description>
      <pubDate>Sun, 27 Oct 2019 21:02:29 GMT</pubDate>
      <dc:creator><![CDATA[anonman]]></dc:creator>
    </item>
  

  
    <item>
      <title>25.10.2019 07:19:50 AnthonyAnson</title>
      <guid isPermaLink="true">https://habr.com/en/companies/dsec/articles/472762/#comment_20801858</guid>
      <link>https://habr.com/en/companies/dsec/articles/472762/#comment_20801858</link>
      <description><![CDATA[I read the whole content and see the structure that is briefly explained about the unique technologies. I get unique information from your post. Thanks for sharing with us.]]></description>
      <pubDate>Fri, 25 Oct 2019 07:19:50 GMT</pubDate>
      <dc:creator><![CDATA[AnthonyAnson]]></dc:creator>
    </item>
  

      

      

    
  </channel>
</rss>
