
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Tue, 14 Apr 2026 01:51:04 GMT</lastBuildDate>
        <item>
            <title><![CDATA[How Cloudflare mitigated yet another Okta compromise]]></title>
            <link>https://blog.cloudflare.com/how-cloudflare-mitigated-yet-another-okta-compromise/</link>
            <pubDate>Fri, 20 Oct 2023 21:39:13 GMT</pubDate>
            <description><![CDATA[ On Wednesday, October 18, 2023, we discovered attacks on our system that we were able to trace back to Okta. We have verified that no Cloudflare customer information or systems were impacted by this event because of our rapid response.  ]]></description>
            <content:encoded><![CDATA[ <p></p><p>On Wednesday, October 18, 2023, we discovered attacks on our system that we were able to trace back to Okta – threat actors were able to leverage an authentication token compromised at Okta to pivot into Cloudflare’s Okta instance. While this was a troubling security incident, our Security Incident Response Team’s (SIRT) real-time detection and prompt response enabled containment and minimized the impact to Cloudflare systems and data. We have verified that <b>no Cloudflare customer information or systems were impacted by this event</b> because of our rapid response. Okta has now released a <a href="https://sec.okta.com/harfiles">public statement</a> about this incident.</p><p>This is the second time Cloudflare has been impacted by a breach of Okta’s systems. In <a href="/cloudflare-investigation-of-the-january-2022-okta-compromise/">March 2022</a>, we blogged about our investigation on how a breach of Okta affected Cloudflare. In that incident, we concluded that there was no access from the threat actor to any of our systems or data – Cloudflare’s use of hard keys for multi-factor authentication stopped this attack.  </p><p>The key to mitigating this week’s incident was our team’s early detection and immediate response. In fact, we contacted Okta about the breach of their systems before they had notified us. The attacker used an open session from Okta, with Administrative privileges, and accessed our Okta instance. We were able to use our Cloudflare Zero Trust Access, Gateway, and Data Loss Prevention and our Cloudforce One threat research to validate the scope of the incident and contain it before the attacker could gain access to customer data, customer systems, or our production network. With this confidence, we were able to quickly mitigate the incident before the threat-actors were able to establish persistence.</p><p>According to Okta’s statement, the threat-actor accessed Okta’s customer support system and viewed files uploaded by certain Okta customers as part of recent support cases. It appears that in our case, the threat-actor was able to hijack a session token from a support ticket which was created by a Cloudflare employee. Using the token extracted from Okta, the threat-actor accessed Cloudflare systems on October 18. In this sophisticated attack, we observed that threat-actors compromised two separate Cloudflare employee accounts within the Okta platform. We detected this activity internally more than 24 hours before we were notified of the breach by Okta. Upon detection, our SIRT was able to engage quickly to identify the complete scope of compromise and contain the security incident. Cloudflare’s <a href="https://www.cloudflare.com/learning/security/glossary/what-is-zero-trust/">Zero Trust architecture</a> protects our production environment, which helped prevent any impact to our customers.</p>
    <div>
      <h2>Recommendations for Okta</h2>
      <a href="#recommendations-for-okta">
        
      </a>
    </div>
    <p>We urge Okta to consider implementing the following best practices, including:</p><ul><li><p>Take any report of compromise seriously and act immediately to limit damage; in this case Okta was first notified on October 2, 2023 by <a href="https://www.beyondtrust.com/blog/entry/okta-support-unit-breach">BeyondTrust</a> but the attacker still had access to their support systems at least until October 18, 2023.</p></li><li><p>Provide timely, responsible disclosures to your customers when you identify that a breach of your systems has affected them.</p></li><li><p>Require hardware keys to protect all systems, including third-party support providers.</p></li></ul><p>For a critical security service provider like Okta, we believe following these best practices is table stakes.</p>
    <div>
      <h2>Recommendations for Okta’s Customers</h2>
      <a href="#recommendations-for-oktas-customers">
        
      </a>
    </div>
    <p>If you are an Okta customer, we recommend that you reach out to them for further information regarding potential impact to your organization. We also advise the following actions:</p><ul><li><p>Enable Hardware MFA for all user accounts. Passwords alone do not offer the necessary level of protection against attacks. We strongly recommend the usage of hardware keys, as other methods of MFA can be vulnerable to phishing attacks.</p></li><li><p>Investigate and respond to:</p><ul><li><p>All unexpected password and MFA changes for your Okta instances.</p></li><li><p>Suspicious support-initiated events.</p></li><li><p>Ensure all password resets are valid and force a password reset for any under suspicion.</p></li><li><p>Any suspicious MFA-related events, ensuring only valid MFA keys are present in the user's account configuration.</p></li></ul></li><li><p>Monitor for:</p><ul><li><p>New Okta users created.</p></li><li><p>Reactivation of Okta users.</p></li><li><p>All sessions have proper authentication associated with it.</p></li><li><p>All Okta account and permission changes.</p></li><li><p>MFA policy overrides, MFA changes, and MFA removal.</p></li><li><p>Delegation of sensitive applications.</p></li><li><p>Supply chain providers accessing your tenants.</p></li></ul></li><li><p>Review session expiration policies to limit session hijack attacks.</p></li><li><p>Utilize tools to validate devices connected to your critical systems, such as Cloudflare Access Device Posture Check.</p></li><li><p>Practice defense in depth for your detection and monitoring strategies.</p></li></ul><p>Cloudflare’s Security and IT teams continue to remain vigilant after this compromise. If further information is disclosed by Okta or discovered through additional log analysis, we will publish an update to this post.</p><p><i>Cloudflare's Security Incident Response Team </i><a href="http://cloudflare.com/careers"><i>is hiring</i></a><i>.</i></p> ]]></content:encoded>
            <category><![CDATA[Okta]]></category>
            <category><![CDATA[Post Mortem]]></category>
            <category><![CDATA[1.1.1.1]]></category>
            <guid isPermaLink="false">3tmgWjRNgroPDMiiOZFXsq</guid>
            <dc:creator>Sourov Zaman</dc:creator>
            <dc:creator>Lucas Ferreira</dc:creator>
            <dc:creator>Kimberly Hall</dc:creator>
            <dc:creator>Grant Bourzikas</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare's handling of a bug in interpreting IPv4-mapped IPv6 addresses]]></title>
            <link>https://blog.cloudflare.com/cloudflare-handling-bug-interpreting-ipv4-mapped-ipv6-addresses/</link>
            <pubDate>Thu, 02 Feb 2023 13:32:00 GMT</pubDate>
            <description><![CDATA[ Recently, a vulnerability was reported to our bug bounty about a bug in the way some of our code interprets IPv4 addresses mapped into IPv6 addresses.  ]]></description>
            <content:encoded><![CDATA[ <p>In November 2022, our <a href="https://www.cloudflare.com/disclosure/">bug bounty program</a> received a critical and very interesting report. The report stated that certain types of DNS records could be used to bypass some of our network policies and connect to ports on the loopback address (e.g. 127.0.0.1) of our servers. This post will explain how we dealt with the report, how we fixed the bug, and the outcome of our internal investigation to see if the vulnerability had been previously exploited.</p><p><a href="https://datatracker.ietf.org/doc/html/rfc4291#section-2-5-5">RFC 4291</a> defines ways to embed an IPv4 address into IPv6 addresses. One of the methods defined in the RFC is to use IPv4-mapped IPv6 addresses, that have the following format:</p>
            <pre><code>   |                80 bits               | 16 |      32 bits        |
   +--------------------------------------+--------------------------+
   |0000..............................0000|FFFF|    IPv4 address     |
   +--------------------------------------+----+---------------------+</code></pre>
            <p>In IPv6 notation, the corresponding mapping for <code>127.0.0.1</code> is <code>::ffff:127.0.0.1</code> (<a href="https://datatracker.ietf.org/doc/html/rfc4038">RFC 4038</a>)</p><p>The researcher was able to use DNS entries based on mapped addresses to bypass some of our controls and access ports on the loopback address or non-routable IPs.</p><p>This vulnerability was reported on November 27 to our bug bounty program. Our Security Incident Response Team (SIRT) was contacted, and incident response activities began shortly after the report was filed. A hotpatch was deployed three hours later to prevent exploitation of the bug.</p>
<table>
<thead>
  <tr>
    <th><span>Date</span></th>
    <th><span>Time (UTC)</span></th>
    <th><span>Activity</span></th>
  </tr>
</thead>
<tbody>
  <tr>
    <td><span>27 November 2022</span></td>
    <td><span>20:42</span></td>
    <td><span>Initial report to Cloudflare's bug bounty program</span></td>
  </tr>
  <tr>
    <td></td>
    <td><span>21:04</span></td>
    <td><span>SIRT oncall is paged</span></td>
  </tr>
  <tr>
    <td></td>
    <td><span>21:15</span></td>
    <td><span>SIRT manager on call starts working on the report</span></td>
  </tr>
  <tr>
    <td></td>
    <td><span>21:22</span></td>
    <td><span>Incident declared and team is assembled and debugging starts</span></td>
  </tr>
  <tr>
    <td></td>
    <td><span>23:20</span></td>
    <td><span>A hotfix is ready and deployment starts</span></td>
  </tr>
  <tr>
    <td></td>
    <td><span>23:47</span></td>
    <td><span>Team confirms that the hotfix is deployed and working</span></td>
  </tr>
  <tr>
    <td></td>
    <td><span>23:58</span></td>
    <td><span>Team investigates if other products are affected. Load Balancers and Spectrum are potential targets. Both products are found to be unaffected by the vulnerability.</span></td>
  </tr>
  <tr>
    <td><span>28 November 2022</span></td>
    <td><span>21:14</span></td>
    <td><span>A permanent fix is ready</span></td>
  </tr>
  <tr>
    <td><span>29 November 2022</span></td>
    <td><span>21:34</span></td>
    <td><span>Permanent fix is merged</span></td>
  </tr>
</tbody>
</table>
    <div>
      <h3>Blocking exploitation</h3>
      <a href="#blocking-exploitation">
        
      </a>
    </div>
    <p>Immediately after the vulnerability was reported to our Bug Bounty program, the team began working to understand the issue and find ways to quickly block potential exploitation. It was determined that the fastest way to prevent exploitation would be to block the creation of the DNS records required to execute the attack.</p><p>The team then began to implement a patch to prevent the creation of DNS records that include IPv6 addresses that map loopback or RFC 1918 (internal) IPv4 addresses. The fix was fully deployed and confirmed three hours after the report was filed. We later realized that this change was insufficient because records hosted on external DNS servers could also be used in this attack.</p>
    <div>
      <h3>The exploit</h3>
      <a href="#the-exploit">
        
      </a>
    </div>
    <p>The exploit provided consisted of the following: a DNS entry, and a Cloudflare Worker. The DNS entry was an <code>AAAA</code> record pointing to <code>::ffff:127.0.0.1:</code></p><p><code>exploit.example.com</code> <code>AAAA</code> <code>::ffff:127.0.0.1</code></p><p>The worker included the following code:</p>
            <pre><code>export default {
    async fetch(request) {
        const requestJson = await request.json()
        return fetch(requestJson.url, requestJson)
    }
}</code></pre>
            <p>The Worker was given a custom URL such as <code>proxy.example.com</code>.</p><p>With that setup, it was possible to make the worker attempt connections on the loopback interface of the server where it was running. The call would look like this:</p>
            <pre><code>curl https://proxy.example.com/json -d '{"url":"http://exploit.example.com:80/url_path"}'</code></pre>
            <p>The attack could then be scripted to attempt to connect to multiple ports on the server.</p><p>It was also found that a similar setup could be used with other IPv4 addresses to attempt connections into internal services. In this case, the DNS entry would look like:</p>
            <pre><code>exploit.example.com AAAA ::ffff:10.0.0.1</code></pre>
            <p>This exploit would allow an attacker to connect to services running on the loopback interface of the server. If the attacker was able to bypass the security and authentication mechanisms of a service, it could impact the confidentiality and integrity of data. For services running on other servers, the attacker could also use the worker to attempt connections and map services available over the network. As in most networks, Cloudflare's network policies and ACLs must allow a few ports to be accessible. These ports would be accessible by an attacker using this exploit.</p>
    <div>
      <h3>Investigation</h3>
      <a href="#investigation">
        
      </a>
    </div>
    <p>We started an investigation to understand the root cause of the problem and created a proof-of-concept that allowed the team to debug the issue. At the same time, we started a parallel investigation to determine if the issue had been previously exploited.</p><p>It all happened when two bugs collided.</p><p>The first bug happened in our internal DNS system which is responsible for mapping hostnames to IP addresses of our customers’ origin servers (the DNS system). When the DNS system tried to answer a query for the DNS record from exploit.example.com, it serialized the IP as a string. The <a href="https://pkg.go.dev/net#IP.String">Golang net library</a> used for DNS automatically converted the IP <code>::ffff:10.0.0.1</code> to string “10.0.0.1”. However, the DNS system still treated it as an IPv6 address. So a query response <code>{ipv6: “10.0.0.1”}</code> was returned.</p><p>The second bug was in our internal HTTP system (the proxy) which is responsible for forwarding HTTP traffic to customer’s origin servers. The bug happened in how the proxy validates this DNS response, <code>{ipv6: “10.0.0.1”}</code>. The proxy has two deny lists of IPs that are not allowed to be used, one for IPv4 and one for IPv6. These lists contain localhost IPs and private IPs. The bug was that the proxy system compared the address 10.0.0.1 against the IPv6 deny list because the address was in the “ipv6” section. Naturally the address didn’t match any entry in the deny list. So the address was allowed to be used as an origin IP address.</p><p>The second investigation team searched through the logs and found no evidence of previous exploitation of this vulnerability. The team also checked Cloudflare DNS for entries using IPv4-mapped IPv6 addresses and determined that all the existing entries had been used for testing purposes. As of now, there are no signs that this vulnerability could have been previously used against Cloudflare systems.</p>
    <div>
      <h3>Remediating the vulnerability</h3>
      <a href="#remediating-the-vulnerability">
        
      </a>
    </div>
    <p>To address this issue we implemented a fix in the proxy service to correctly use the deny list of the parsed address, not the deny list of the IP family the DNS API response claimed to be, to validate the IP address. We confirmed both in our test and production environments that the fix did prevent the issue from happening again.</p><p>Beyond maintaining a <a href="https://www.cloudflare.com/disclosure/">bug bounty program</a>, we regularly perform internal security reviews and hire third-party firms to audit the software we develop. But it is through our bug bounty program that we receive some of the most interesting and creative reports. Each report has helped us improve the security of our services. We invite those that find a security issue in any of Cloudflare’s services to report it to us through <a href="https://hackerone.com/cloudflare">HackerOne</a>.</p> ]]></content:encoded>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Bug Bounty]]></category>
            <category><![CDATA[IPv6]]></category>
            <guid isPermaLink="false">2moNY48YbcqIe8gCAZ6P6K</guid>
            <dc:creator>Lucas Ferreira</dc:creator>
            <dc:creator>Aki Shugaeva</dc:creator>
            <dc:creator>Yuchen Wu</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare’s investigation of the January 2022 Okta compromise]]></title>
            <link>https://blog.cloudflare.com/cloudflare-investigation-of-the-january-2022-okta-compromise/</link>
            <pubDate>Tue, 22 Mar 2022 16:57:44 GMT</pubDate>
            <description><![CDATA[ Today at 03:30 UTC we learnt of a compromise of Okta. We use Okta internally for employee identity as part of our authentication stack. We have investigated this compromise carefully and do not believe we have been compromised as a result ]]></description>
            <content:encoded><![CDATA[ <p>Today, March 22, 2022 at 03:30 UTC we learnt of a compromise of Okta. We use Okta internally for employee identity as part of our authentication stack. We have investigated this compromise carefully and do not believe we have been compromised as a result. We do not use Okta for customer accounts; customers do not need to take any action unless they themselves use Okta.</p>
    <div>
      <h3>Investigation and actions</h3>
      <a href="#investigation-and-actions">
        
      </a>
    </div>
    <p>Our <a href="https://twitter.com/toddmckinnon/status/1506184721922859010">understanding</a> is that during January 2022, hackers outside Okta had access to an Okta support employee’s account and were able to take actions as if they were that employee. In a screenshot shared on social media, a Cloudflare employee’s email address was visible, along with a popup indicating the hacker was posing as an Okta employee and could have initiated a password reset.</p><p>We learnt of this incident via Cloudflare’s internal SIRT. SIRT is our Security Incident Response Team and any employee at Cloudflare can alert SIRT to a potential problem. At exactly 03:30 UTC, a Cloudflare employee emailed SIRT with a link to a <a href="https://twitter.com/_MG_/status/1506109152665382920">tweet</a> that had been sent at 03:22 UTC. The tweet indicated that Okta had potentially been breached. Multiple other Cloudflare employees contacted SIRT over the following two hours.</p><p>The following timeline outlines the major steps we took following that initial 03:30 UTC email to SIRT.</p>
    <div>
      <h4>Timeline (times in UTC)</h4>
      <a href="#timeline-times-in-utc">
        
      </a>
    </div>
    <p>03:30 - SIRT receives the first warning of the existence of the tweets.</p><p>03:38 - SIRT sees that the tweets contain information about Cloudflare (logo, user information).</p><p>03:41 - SIRT creates an incident room to start the investigation and starts gathering the necessary people.</p><p>03:50 - SIRT concludes that there were no relevant audit log events (such as password changes) for the user that appears in the screenshot mentioned above.</p><p>04:13 - Reached out to Okta directly asking for detailed information to help our investigation.</p><p>04:23 - All Okta logs that we ingest into our Security Information and Event Management (SIEM) system are reviewed for potential suspicious activities, including password resets over the past three months.</p><p>05:03 - SIRT suspends accounts of users that could have been affected.</p><p>We temporarily suspended access for the Cloudflare employee whose email address appeared in the hacker’s screenshots.</p><p>05:06 - SIRT starts an investigation of access logs (IPs, locations, multifactor methods) for the affected users.</p><p>05:38 - First <a href="https://twitter.com/eastdakota/status/1506143353544478724">tweet</a> from Matthew Prince acknowledging the issue.</p><p>Because it appeared that an Okta support employee with access to do things like force a password reset on an Okta customer account had been compromised, we decided to look at every employee who had reset their password or modified their Multi-Factor Authentication (MFA) in any way since December 1 up until today. Since Dec. 1, 2021, 144 Cloudflare employees had reset their password or modified their MFA. We forced a password reset for them all and let them know of the change.</p><p>05:44 - A list of all users that changed their password in the last three months is finalized. All accounts were required to go through a password reset.</p><p>06:40 - <a href="https://twitter.com/eastdakota/status/1506158901078618118">Tweet</a> from Matthew Prince about the password reset.</p><p>07:57 - We received confirmation from Okta that there were no relevant events that may indicate malicious activity in their support console for Cloudflare instances.</p>
    <div>
      <h3>How Cloudflare uses Okta</h3>
      <a href="#how-cloudflare-uses-okta">
        
      </a>
    </div>
    <p>Cloudflare uses Okta internally as our identity provider, integrated with Cloudflare Access to guarantee that our users can safely access internal resources. In previous blog posts, we described <a href="/dogfooding-from-home/">how we use Access to protect internal resources</a> and <a href="/securing-cloudflare-using-cloudflare/">how we integrated hardware tokens to make our user authentication process more resilient</a> and <a href="/account-compromise-security-overview/">prevent account takeovers</a>.</p><p>In the case of the Okta compromise, it would not suffice to just change a user's password. The attacker would also need to change the hardware (FIDO) token configured for the same user. As a result it would be easy to spot compromised accounts based on the associated hardware keys.</p><p>Even though logs are available in the Okta console, we also store them in our own systems. This adds an extra layer of security as we are able to store logs longer than what is available in the Okta console. That also ensures that a compromise in the Okta platform cannot alter evidence we have already collected and stored.</p><p>Okta is not used for customer authentication on our systems, and we do not store any customer data in Okta. It is only used for managing the accounts of our employees.</p><p>The main actions we took during this incident were:</p><ol><li><p>Reach out to Okta to gather more information on what is known about the attack.</p></li><li><p>Suspend the one Cloudflare account visible in the screenshots.</p></li><li><p>Search the <a href="https://developer.okta.com/docs/reference/api/system-log/">Okta System logs</a> for any signs of compromise (password changes, hardware token changes, etc.). Cloudflare reads the system Okta logs every five minutes and stores these in our SIEM so that if we were to experience an incident such as this one, we can look back further than the 90 days provided in the Okta dashboard. Some event types within Okta that we searched for are: <code>user.account.reset_password</code>, <code>user.mfa.factor.update</code>, <code>system.mfa.factor.deactivate</code>, <code>user.mfa.attempt_bypass</code>, and <code>user.session.impersonation.initiate</code>. It’s unclear from communications we’ve received from Okta so far who we would expect the <a href="https://developer.okta.com/docs/reference/api/system-log/#actor-object">System Log Actor</a> to be from the compromise of an Okta support employee.</p></li><li><p>Search <a href="https://support.google.com/a/answer/11479100?ref_topic=11479095">Google Workplace email logs</a> to view password resets. We confirmed password resets matched the Okta System logs using a separate source from Okta considering they were breached, and we were not sure how reliable their logging would be.</p></li><li><p>Compile a list of Cloudflare employee accounts that changed their passwords in the last three months and require a new password reset for all of them. As part of their account recovery, each user will join a video call with the Cloudflare IT team to verify their identity prior to having their account re-enabled.</p></li></ol>
    <div>
      <h3>What to do if you are an Okta customer</h3>
      <a href="#what-to-do-if-you-are-an-okta-customer">
        
      </a>
    </div>
    <p>If you are also an Okta customer, you should reach out to them for further information. We advise the following actions:</p><ol><li><p>Enable MFA for all user accounts. Passwords alone do not offer the necessary level of protection against attacks. We strongly recommend the usage of hard keys, as other methods of MFA can be vulnerable to phishing attacks.</p></li><li><p>Investigate and respond:a. Check all password and MFA changes for your Okta instances.b. Pay special attention to support initiated events.c. Make sure all password resets are valid or just assume they are all under suspicion and force a new password reset.d. If you find any suspicious MFA-related events, make sure only valid MFA keys are present in the user's account configuration.</p></li><li><p>Make sure you have other security layers to provide extra security in case one of them fails.</p></li></ol>
    <div>
      <h3>Conclusion</h3>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>Cloudflare’s Security and IT teams are continuing to work on this compromise. If further information comes to light that indicates compromise beyond the January timeline we will publish further posts detailing our findings and actions.</p><p>We are also in contact with Okta with a number of requests for additional logs and information. If anything comes to light that alters our assessment of the situation we will update the blog or write further posts.</p> ]]></content:encoded>
            <category><![CDATA[Okta]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Post Mortem]]></category>
            <guid isPermaLink="false">2adIs12PUMYCgRU2zfLCJs</guid>
            <dc:creator>John Graham-Cumming</dc:creator>
            <dc:creator>Lucas Ferreira</dc:creator>
            <dc:creator>Daniel Stinson-Diess</dc:creator>
        </item>
    </channel>
</rss>