Expected behavior: On deployment, company should be a contract address implementing CompanyGame interface; otherwise calls (e.g., reputation() and sell_to_customer) may misbehave.
Actual behavior: __init__ sets self.company = _company with no validation.
No check that _company has code (is a contract). If a non-contract EOA is provided (accidentally or maliciously), raw_call will still succeed (transferring ETH), but reputation() staticcall may fail or return 0. A malicious address could be set, and the company logic (in CompanyGame) might be absent or malicious.
Likelihood
Medium :deploy-time mistake or malicious config possible.
Impact
1.Misconfiguration leading to lost funds (paying an EOA).
2.If company is a malicious contract, it can behave arbitrarily when sell_to_customer is called.
It implements the expected reputation() view and forwards any received ETH to the attacker sink address.
Validate _company is a contract at deployment:
Add a setter for company address restricted to owner (if governance exists), with same check, and emit event.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.