TL;DR
- 01What happened
In March 2025 the City of Portland, Oregon, sent $6.7 million owed to the joint venture building its water filtration plant to an account named by someone posing as one of the contractor’s employees. The impostor had changed the contractor’s bank account in SAP Ariba, the city’s supplier system (US DOJ; press citing the city’s affidavit).
- 02Why it went through
The city had not acted on an earlier emailed change after its check to the contact on file went unanswered. The impostor then asked for the password-reset link to be resent, and it reached the impostor. From there, the change looked like the contractor’s own legitimate edit.
- 03The missing layer
On March 25 the receiving bank flagged possible fraud and the city asked for the payment to be blocked; the funds were still in the receiving account, were seized in April and later fully returned. The March 21 transfer still went out. What failed was the layer that checks a new bank account against the supplier’s registered contact before paying.
What happened
- Party
- The City of Portland, Oregon. A joint venture of MWH Constructors and Kiewit (MWH-Kiewit) is building the Water Bureau’s Bull Run Filtration Project, a roughly $2.1 billion plant.
- Who was impersonated
- A proposal manager at MWH, listed as the contract contact in the city’s vendor database (press, citing the city’s lawsuit). The city does not believe the employee committed the theft; the name was used.
- Loss
- A $6.7 million construction payment went to an account named by the impostor. On April 16, 2025, the FBI seized $6,748,680 still in that account (US DOJ). In August the US Marshals Service returned the funds to the city (press).
- Receiving account
- An attorney trust account in the name of a New York law firm. The city briefly sued the firm, then dropped the suit after the firm showed it was also a victim (press).
- Initial access
- Whether the impostor had broken into the contractor’s email has not been disclosed. ENR says the case probably started with an email breach through phishing (speculation). No arrests had been made as of September 2025.
Glossary
SAP Ariba — A cloud service for managing supplier records, invoices and payments. Portland rolled it out in February 2025 and required its contractors to use it.
Password-reset link — A link sent when someone cannot log in, used to set a new password. Whoever receives it can get into the account.
Civil forfeiture — A civil procedure that lets the government seize criminal proceeds and return them to victims without waiting for a criminal conviction.
The attack ran as follows (per ENR, citing the city attorney’s affidavit).
The stopping point is ③. Had the link's destination, or the new bank account, been checked against the supplier's registered contact, the transfer in ④ would not happen. The check in ① worked.
February 2025. A bank account confirmation letter was attached. The check went unanswered, and the city made no change.
Asked for it to go to an address that looked like the same one.
The link reached the impostor, not the employee.
March 21. Settlement date March 25.
March 25. The funds were still in the receiving account.
Timeline — disclosure and response
- The city rolls out SAP Ariba and requires contractors to use it. The same month, an email in an MWH employee’s name asks to change the bank account. The city sends a check to the contact on file; it goes unanswered, and no change is made. The impostor then asks for the reset link to be resent, and the city sends it.
- The city transfers $6.7 million. Settlement date is March 25.
- The impostor emails that the bank details were wrong and asks to switch to another account. ENR says this attempted switch apparently set off the fraud alarm.
- Chase, the receiving bank, alerts Wells Fargo, the city’s bank, to possible fraud. The city’s deputy controller orders the payment rejected or blocked.
- The impostor starts calling the city to ask about the payment (10 calls in all).
- The Water Bureau confirms the MWH employee was impersonated.
- The FBI obtains a warrant and seizes $6,748,680.
- The US Attorney’s Office for the District of Oregon announces a civil forfeiture action.
- The US Marshals Service returns the funds to the city.
The February requests and the March 21–25 events rely on ENR’s reporting of the city attorney’s affidavit; we have not seen the affidavit itself. The February change (an impostor accessed a payment system and changed the bank account) and the seizure amount and date rely on the US DOJ release (primary). Whether the link went to an address imitating the contractor’s has not been disclosed. The DOJ dates the change to February; ENR’s sequence puts the link and the change about two weeks before March 21, possibly in early March.
After disclosure
- City of Portland: Sued the New York law firm holding the receiving account to keep the funds from moving, then dropped the suit after the firm cooperated with the FBI and showed it was also a victim (press). The mayor said fast action by local and federal law enforcement stopped the transfer “before it landed in the wrong hands” (press).
- US DOJ: Urged victims of similar scams to contact law enforcement without delay, noting the recovery was possible only because the city reported it.
Why it wasn’t stopped
The failure was neither in spotting the email nor in the bank’s detection. An operation that switched the supplier’s bank account took effect, and was used for payment, without being checked against the supplier’s registered contact.
The emailed request to change the bank account was stopped by a check sent to the contact on file. The password-reset link for the supplier account that followed reached the requester, and the bank account was switched there.
Proof here means checking, before paying, that a new bank account really belongs to the supplier, through the supplier's registered contact, and keeping a record. Detection means noticing possible fraud after the transfer.
another account
The first emailed request was stopped by a check with the contact on file, but nothing says where the reset link was sent was checked, and a change made through it is indistinguishable from the supplier’s own edit. The money came back through the receiving bank’s alert and the seizure; the transfer itself went through. 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 supplier’s bank account change only once it is confirmed through the supplier’s registered contact, whatever path it arrives by: an emailed request, a supplier’s own edit in a portal, or an edit after a password reset. Then an impostor who obtains a login still cannot redirect payments. It sits in front of detection, not in place of it.
Industries and operations to watch
- IndustryPublic sector
- Cities and public bodies with many contractors and large payments. Contractor and contact names are visible in public bids and contracts.
- IndustryConstruction
- Large projects run long chains of payments from owners and general contractors. Pauses and restarts are often public.
- OperationBank account changes
- Changes to a supplier’s bank account, and resets of a supplier’s login.
Do today’s controls close it?
| Control | This case | Why |
|---|---|---|
| Check with the contact on file | Partial | Worked: the emailed bank-change request went unanswered, so nothing was changed. Did not: nothing says the reset link’s destination was checked, and the link reached the impostor. |
| Supplier self-service portal | Ineffective | Did not: an impostor with the login looked like the supplier, and the bank-detail change went through. |
| Bank fraud detection | Partial | Worked: four days after the transfer, the receiving bank flagged it, and the seizure brought the money back. Did not: the transfer itself was not stopped. |
| Staff training | Partial | Worked: staff caught the first emailed request. Did not: the reset link, a different path, got through. |
- Put bank changes and login resets through the same check. Activate either only when confirmed through the supplier’s registered contact. Never send to an address the requester supplies.
- Check that a new account belongs to the supplier before paying. Match the account holder to the supplier before any payment.
- Record who approved the change, and on what check. Look at that record before paying, and pay only to accounts that carry it. Keep it in a form a third party can verify later, as proof.
Three things to confirm about supplier bank accounts
- Can a reset of a supplier’s login be sent anywhere other than the registered contact?
- Do you hold payments to a newly changed account until the check is done?
- Do you confirm bank changes through the registered contact, not a contact found in the email that asked for the change?
Note: if the supplier’s registered contact itself is compromised, this check can be passed. And it protects where payments go; an impostor falsifying what an invoice asks for still needs separate controls.
Sources
- PrimaryUS Attorney’s Office, District of Oregon “United States Files Forfeiture Action to Recover $6.7 Million in Stolen Funds”
3 more (reporting, analysis)
- Press, citing the city attorney’s affidavitENR “How Portland, Ore., Recovered a Stolen $6.7M Payment Meant for MWH-Kiewit”
- Press, citing the city’s lawsuitWillamette Week “Feds Investigate $6.7 Million in Stolen Vendor Payments From Bull Run Filtration Project”
- PressWillamette Week “City Recovers $6.7 Million From Scam That Targeted the Water Bureau”
References: “The last layer left in AI-era cyber defense”