TL;DR
- 01What happened
In February and March 2025 the City of Baltimore, Maryland, sent two payments totaling $1.52 million, owed to a supplier, to an account controlled by someone posing as one of the supplier’s employees. The impostor first got added as a supplier contact in Workday, the city’s procurement system, then submitted a bank change with a forged voided check; the account was switched on February 19 (city Inspector General report).
- 02Why it went through
A city employee approved the new contact without contacting the supplier (Inspector General). Two more approved the bank change, but the rules at the time required neither a call to the supplier nor a list of its authorized signers.
- 03The missing layer
On March 13 a bank alert tipped off the city and the second payment came back. About $0.8 million from the first had not been recovered at the time of the report. What failed was the layer that checks new contacts and bank changes with the supplier’s registered contact.
What happened
- Party
- The City of Baltimore’s Department of Accounts Payable, under the Comptroller, which handles city payments. Since August 2022 the city has used Workday for procurement and supplier management; suppliers update contacts and bank accounts there. Contact requests are handled by the Bureau of Procurement and by Accounts Payable.
- Who was impersonated
- A supplier employee. The name on the impostor’s request matched that employee, who has no role in the supplier’s finances. The email address given was not one the supplier issues to staff.
- Loss
- $803,384.44 on February 21, 2025 and $721,236.60 on March 10, a total of $1,524,621.04, went to the impostor’s account. The second came back. The first had not been recovered at the time of the report. The city filed an insurance claim. The supplier was paid again for both.
- How it came to light
- On March 13, the bank holding the impostor’s account called the city’s bank about possible fraud, and the city’s finance department was told.
- Initial access
- How the impostor obtained the supplier employee’s details has not been disclosed. The Comptroller’s office initially told the press the impostor bypassed the city’s geofencing with a Starlink IP address; city IT staff told the Inspector General Starlink played no part in the Workday access.
Glossary
Workday — A cloud service for HR and procurement. Since 2022 Baltimore has used it for suppliers to view invoices and payments and to update contacts and bank accounts.
Voided check — A check marked VOID so it cannot be cashed. In the US it is often attached to bank-account registrations as proof of the account number.
Office of the Inspector General (OIG) — An independent city office that investigates fraud and waste in city government and publishes public synopses of its findings.
Per the Inspector General’s report, the attack ran as follows.
The stopping points are ② and ③. Had the new contact and the bank change been checked with the supplier's registered contact, the payments in ④ would not happen. City approvals were in place at ② and ③.
December 9, 2024. Used an email address the supplier does not issue.
December 11. Some details on the request did not match the record.
One approved on January 10, 2025, then another. Both said they did not recall seeing the voided check. Workday records show city staff switching the account on February 19.
February 21 and March 10.
March 13. The second payment came back.
Timeline — disclosure and response
- The impostor, posing as a supplier employee, asks to be added as a contact.
- A city employee approves the request and adds the impostor to the supplier account. From that day the impostor tries several times to change the bank account.
- The impostor submits a bank change with a forged voided check in the supplier’s name.
- A city employee approves the change submitted on January 7; another then approves it (date not given).
- The impostor emails the city asking about an invoice and to switch the bank account (again on February 5).
- After the impostor’s emailed requests, Workday records show a city employee switching the supplier’s bank account to the impostor’s.
- $803,384.44 goes to the impostor’s account.
- $721,236.60 goes out; it is later returned to the city.
- The bank holding the impostor’s account alerts the city’s bank to possible fraud.
- The Inspector General receives a complaint.
- Accounts Payable responds to the Inspector General’s report.
- The Inspector General publishes a public synopsis.
The facts rely on the Inspector General’s public synopsis and Accounts Payable’s response (both primary). The synopsis summarizes a fuller report given to city management. Its timeline graphic dates the request and the addition “Dec. 9, 2025” and “Dec. 11, 2025” and its text dates the voided check “January 4, 2024”; from the sequence, we read these as December 2024 and January 2025.
After disclosure
- Inspector General: Found Accounts Payable had no procedure for verifying supplier contacts and strongly recommended a list of authorized users for each supplier account. Controls created after similar cases in 2020 and 2022 were not being used (Comptroller’s office leadership said they were not carried over to Workday). The Inspector General received the complaint about six days after the city learned of the fraud. Also called for staff training and rules requiring immediate reporting of suspected fraud. The matter was referred to law enforcement.
- Accounts Payable: Now requires cross-verification with supplier contacts for all banking changes. From August 2025 in Workday: a restricted role for sensitive supplier-profile updates, email alerts to all listed supplier contacts on pending changes, a 48-hour delay with layered reviews for bank-account changes, and flags for rapid, duplicate or unusual profile activity. Talks are under way to add bank-account validation tools.
Why it wasn’t stopped
The failure was not a lack of approvals. Both the new contact and the bank change were approved, but no procedure required checking with the supplier’s registered contact.
The fake contact was added to the supplier's account without anyone checking with the supplier's registered contact. The bank change submitted from there passed two levels of approval.
Proof here means checking with the supplier's registered contact that adding a contact and changing the bank account really came from that supplier, and keeping a record. Detection means noticing possible fraud after payment.
another account
The city learned of it from the receiving bank; the second payment came back, the first did not. Unless the check goes to the supplier’s registered contact, adding approvers does not stop an impostor. That distance is the gap between detection and proof, and it is structural.
The same structure appears in Polaris Holdings / Booking.com (a hotel’s payout account was switched in the legitimate admin screen).
How to counter this
Activate a new contact on a supplier account, and any bank change, only once confirmed with the supplier’s registered contact, never with the requester or a contact given in the request. Then using a supplier employee’s name is not enough to become a contact or change where money goes. It sits in front of detection, not in place of it.
Industries and operations to watch
- IndustryPublic sector
- Cities and public bodies with many suppliers. Supplier staff names are visible in public bids and contracts.
- OperationAccount administration
- Adding people to supplier portals, and what they can do there.
- OperationBank account changes
- Changes to a supplier’s bank account, and the documents backing them (voided checks, bank letters).
Do today’s controls close it?
| Control | This case | Why |
|---|---|---|
| Multiple approvers | Partial | Two staff approved the bank change. Without a required check with the supplier, an impostor still passes. |
| Supporting documents | Ineffective | The voided check was forged; both approvers said they did not recall seeing it. Documents can be forged. |
| Supplier self-service portal | Partial | Suppliers enter their own details, but anyone added as a contact also looks like the supplier. |
| Bank fraud detection | Partial | The second payment came back. The alert came too late for the first. |
- Treat adding a contact as seriously as a bank change. Check with the supplier’s registered contact before adding anyone to a supplier account.
- Activate a bank change only when confirmed with the supplier’s registered contact. Do not decide on a contact given in the request or on attached documents alone.
- Record who approved the change, and on what check. Tie it to the supplier’s list of authorized contacts and keep it as proof, so you can later show whose request was checked by whom.
Three things to confirm about supplier accounts
- Do you have, for each supplier, a list of people allowed to change its record?
- Do you check that the email address on a request to add a contact belongs to the supplier?
- When a bank account changes, are all registered supplier contacts notified?
Note: if the supplier’s registered contact itself is compromised, this check can be passed. And it protects where payments go; false invoice contents still need separate controls.
Sources
- Primary, public synopsisCity of Baltimore, Office of the Inspector General “Public Synopsis of Case #25-0028-I: Fraudster Attempt to Divert $1.5Million of City Funds”
- Primary, response to the OIGCity of Baltimore, Comptroller’s Office, Accounts Payable “Agency Response to OIG Case #25-0028-I”
1 more (reporting, analysis)
- PressThe Record “Scammer steals $1.5 million from Baltimore by spoofing city vendor”
References: “The last layer left in AI-era cyber defense”