Affected Platforms: Amazon Web Services (AWS)
Impacted Users: Any organization
Impact: Stolen cloud credentials result in significant financial losses, data breaches of sensitive information, operational disruption, and reputational damage.
Severity Level: High
Identity compromise remains one of the most pressing threats to cloud infrastructure today. When attackers gain access to valid credentials, they can often bypass the traditional security controls designed to protect those environments. In AWS, this type of compromise frequently manifests through abuse of the Simple Email Service (SES), one of the most common tactics observed in real-world intrusions. SES offers adversaries a convenient and scalable way to conduct illicit email operations once they’ve obtained valid AWS access keys.
In recent activity, we identified a campaign in which adversaries used stolen credentials to target SES. As part of this campaign, we uncovered a large-scale attack infrastructure—dubbed TruffleNet—built around the open-source tool TruffleHog, which is used to systematically test compromised credentials and perform reconnaissance across AWS environments. Beyond credential testing, we also observed adversaries leveraging compromised cloud accounts to facilitate downstream Business Email Compromise (BEC) campaigns.
This blog outlines both components of the campaign and provides related indicators of compromise (IOCs).
Recently, we observed the emergence of a new attack infrastructure known as TruffleNet. In one incident involving multiple compromised credentials, we recorded activity from more than 800 unique hosts across 57 distinct Class C networks. This infrastructure was characterized by the use of TruffleHog, a popular open-source secret-scanning tool, and by consistent configurations, including open ports and the presence of Portainer.
The initial TruffleNet connection typically consisted of a simple call to GetCallerIdentity, used to test whether credentials were valid. A separate component of the infrastructure leveraged the AWS CLI to query the GetSendQuota API for Amazon Simple Email Service (SES)—a call frequently seen at the outset of SES abuse.
Notably, the vast majority of TruffleNet IPs showed no bad reputation or antivirus detections. In most cloud-based attacks, source IP addresses are often linked to VPNs, TOR nodes, or other illicit activity. The absence of such associations suggests a dedicated infrastructure built for a specific purpose. Similarly, no follow-on actions or privilege escalations were attempted from these source hosts—only GetSendQuota and GetCallerIdentity calls were observed. This pattern implies a possible tiered infrastructure, with some nodes dedicated to reconnaissance and others reserved for later stages of the attack.
Figure 1: TruffleNet Reconnaissance Topology
Further analysis of TruffleNet hosts identified 10 hosting ASNs, with most mapped to U.S.-based WS Telecom Inc. (AS209372) and Hivelocity LLC (AS61317). Host-level analysis revealed consistent port and configuration patterns. Most had ports 5432 and 3389 open; however, these were not used for their typical assignments (PostgreSQL and RDP, respectively). Many hosts were also configured with Portainer.
Figure 2: TruffleNet ASNs and Ports
Portainer is an open-source management UI for Docker and Kubernetes that simplifies container deployment and orchestration. While widely used by administrators for legitimate DevOps workflows, attackers can also exploit it as a lightweight control panel for managing malicious infrastructure. By providing a centralized dashboard and API, Portainer effectively serves as an “infrastructure-as-a-service” layer, enabling adversaries to coordinate large numbers of nodes with minimal effort.
Figure 3: TruffleNet Host Configuration
While it remains unclear whether the additional SES abuse was directly related, it was observed alongside TruffleNet reconnaissance activity. This abuse involved Business Email Compromise (BEC)—a targeted attack in which scammers impersonate trusted individuals, such as vendors, to commit financial fraud. In this instance, Amazon SES was exploited within the compromised environment to establish sending identities using DomainKeys Identified Mail (DKIM) from previously compromised WordPress sites.
Before carrying out the BEC campaign, the attackers conducted more aggressive cloud reconnaissance, followed by an attempted privilege escalation by creating a new identity. The escalation attempt failed, but one user account possessed sufficient privileges to interact with the SES service.
The following APIs were observed, listed in order of occurrence:
The following request parameter was observed for the CreateEmailIdentity API. In this case, the attacker assigned a compromised DKIM key from a WordPress site, allowing AWS SES to send emails on the attacker’s behalf:
{"dkimSigningAttributes":{"domainSigningAttributesOrigin":"AWS_SES_US_EAST_1",
"domainSigningPrivateKey":"HIDDEN_DUE_TO_SECURITY_REASONS"},"emailIdentity":"cfp-impactaction[.]com"}
Figure 4: Identity Compromise and BEC
A total of six email identities were created:
Several of these domains share a hosting provider in France. While the attacker did not create them, they appear to have been compromised through exploitation of the same vulnerabilities. Some have also been linked to other malicious activity, including XMrig cryptojacking malware and the Coroxy trojan (also known as SystemBC).
Immediately following the attack, the domain cfp-impactaction.com was used in a “BEC vendor onboarding W-9 scam” targeting the oil and gas sector. Attackers sent an invoice purporting to be from ZoomInfo, requesting a $50,000 ACH payment. The attached W-9 contained a publicly available Employer ID number of the impersonated company to lend credibility. The email directed payment inquiries to a typosquatted address:
The TruffleNet campaign highlights how quickly threat actors are evolving their tactics to exploit cloud infrastructure at scale. By combining credential theft, reconnaissance automation, and SES abuse, adversaries can weaponize legitimate services to conduct high-volume fraud and Business Email Compromise with minimal detection. Continuous monitoring, least-privilege access, and behavioral analytics are essential to mitigating these risks. Fortinet’s integrated security platform—spanning FortiCNAPP, FortiGate, FortiMail, FortiEDR, and FortiGuard intelligence—provides the visibility and protection organizations need to defend against identity-driven cloud threats.
FortiCNAPP provides comprehensive detection capabilities for the tactics described in this blog. Its composite alerting technology evaluates multiple aspects of cloud-based attacks, including:
Composite alerting is highly effective at detecting identity compromise, which often evades traditional point-based detection. Because valid credentials appear legitimate, they can bypass standard monitoring when no clear indicators of compromise are present. This makes anomaly detection the last—and often most critical—line of defense. Composite alerts analyze both network and behavioral anomalies, generating high-confidence alerts for cloud attacks and identity misuse.
The example below shows an alert generated during this activity.
Figure 6: FortiCNAPP Composite Alert
Additional protections are provided through FortiGate, FortiMail, FortiClient, and FortiEDR, all of which leverage the FortiGuard AntiVirus engine. Customers with these products and up-to-date protections are safeguarded against the threats described.
FortiMail identifies the phishing email as “virus detected.” In addition, real-time anti-phishing protection powered by FortiSandbox, embedded in Fortinet’s FortiMail, web filtering, and antivirus solutions, delivers advanced defense against both known and unknown phishing attempts.
The FortiGuard Content Disarm and Reconstruction (CDR) service, available through FortiGate and FortiMail, removes malicious macros from documents before they can execute.
Organizations are also encouraged to take advantage of Fortinet’s free NSE training module, FCF – Fortinet Certified Fundamentals, which helps users recognize and defend against phishing and other social engineering attacks.
Finally, the FortiGuard IP Reputation and Anti-Botnet Security Service proactively blocks attacks by aggregating malicious source IP data from Fortinet’s distributed network of global sensors, CERTs, MITRE, cooperative partners, and other trusted sources. This continuous intelligence enables up-to-date protection against hostile actors.
If you believe this or any other cybersecurity threat has impacted your organization, please contact the FortiGuard Incident Response Team for immediate assistance.
As part of this investigation, FortiGuard Labs is publishing a set of indicators to help defenders identify related activity. These include IP addresses linked with the credential testing infrastructure, as well as domains observed in Business Email Compromise (BEC) activity. Security teams should monitor their AWS environments for any matching behavior or API usage.
More than 800 source IPs were observed in TruffleNet activity. For a complete list, refer to the associated VirusTotal collection. The following user agents were observed [note that the AWS CLI variants are not unique to TruffleNet].
TruffleHog
The following are observed source IPs for the BEC activity. Both IP addresses appear to be MikroTik RouterOS devices and are likely compromised by the attackers
The following compromised domains were used to create email identities.
User Agents Observed in BEC Compromise:
| 43.252.9.253 | "Boto3/1.36.3 md/Botocore#1.36.3 ua/2.0 os/linux#6.6.87.2-microsoft-standard-WSL2 md/arch#x86_64 lang/python#3.12.3 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.36.3" |
| 43.252.9.253 | "aws-cli/2.27.57 md/awscrt#0.26.1 ua/2.1 os/linux#6.6.87.2-microsoft-standard-WSL2 md/arch#x86_64 lang/python#3.13.4 md/pyimpl#CPython m/Z,b,E cfg/retry-mode#standard md/installer#exe md/distrib#ubuntu.24 sid/2aa4051c3d17 md/prompt#off md/command#sesv2.create-email-identity" |
| 175.103.36.74 | "Boto3/1.36.3 md/Botocore#1.36.3 ua/2.0 os/linux#6.6.87.2-microsoft-standard-WSL2 md/arch#x86_64 lang/python#3.12.3 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.36.3" |
| 175.103.36.74 | "aws-cli/2.27.57 md/awscrt#0.26.1 ua/2.1 os/linux#6.6.87.2-microsoft-standard-WSL2 md/arch#x86_64 lang/python#3.13.4 md/pyimpl#CPython m/E,b,Z cfg/retry-mode#standard md/installer#exe md/distrib#ubuntu.24 sid/f8b68673fee3 md/prompt#off md/command#sesv2.create-email-identity" |
APIs can also serve as lower-confidence indicators of compromise, revealing attacker tactics, techniques, and procedures (TTPs). Certain combinations of calls are strongly correlated with SES abuse.
For example, calling PutAccountVdmAttributes and PutAccountDedicatedIpWarmupAttributes shortly after GetAccount, GetSendQuota, and ListIdentities, and immediately before or after CreateEmailIdentity, is often a reliable signal of SES abuse.