Can a Reentrancy Attack Be Performed without a Fallback Function?

Yes, a reentrancy attack can be performed without a fallback function. Any external call from one contract to another can be a vector for reentrancy.

For example, if a contract calls a function on an external contract that the attacker controls, that function can be programmed to call back into the original contract. The vulnerability is not the fallback function itself, but the act of making an external call before updating state.

The fallback function is just a common and convenient way to trigger the re-entry when Ether is sent.

How Have Recent Versions of Solidity Changed the Behavior of Fallback Functions to Mitigate This Risk?
What Is the Role of a Fallback Function in Facilitating a Reentrancy Attack?
Do Reentrancy Guards Protect against Both Single-Function and Cross-Function Attacks?
How Is the Call Function in Solidity Related to Reentrancy?
What Are the Differences between Single-Function and Cross-Function Reentrancy Attacks?
What Is a ‘Reentrancy Attack’?
What Is the Primary Difference between a ‘View’ Function and a ‘State-Changing’ Function?
What Is a Denial-of-Service (DoS) Attack Related to Fallback Functions?

Glossar