Storage Collision
Storage collision happens in upgradeable smart contracts when the proxy contract and the implementation contract define their storage variables in a way that overlaps or conflicts. Because the proxy stores the data and the implementation defines the structure, if they are not perfectly aligned, the implementation may overwrite the wrong variables.
This can lead to unpredictable behavior, corruption of critical data, or the ability for an attacker to manipulate internal state variables. To prevent this, developers use specific patterns like unstructured storage or inherited storage layouts to ensure that variables are mapped correctly across upgrades.
It is a subtle but critical issue that can render a protocol's data integrity useless if ignored during the development of upgradeable systems.