Are you a real security "researcher"?
š“āā ļø Deep dive
The real problem comes not from knowing how to hunt for bugs, but from knowing where to hunt for them.
Bugs are hiding everywhere, but those who find the most sophisticated ones win the pot.
However, what does āsophisticatedā mean?
Sometimes, itās the attack vectors that consist of multiple steps, for example like in the Abracadabra hack.
But most of the time, sophisticated bugs are usually where people donāt dare to look.
Real truth that you must accept is that you canāt find sophisticated bugs if you donāt constantly
- analyse
- miss
- aim to find
such bugsā¦
Thatās why I really like to study bug bounties rather than individual findings from Solodit.
Because most of the time, bounties are the product of very crazy and complex ideas, which have birthed real bugs.
Now, you have a question? OK⦠All seems clear.
But how can I train to find sophisticated bugs?
- Should I dedicate 10k hours into Web3 Security?
- Should I constantly study complex exploits?
- Should I develop the attacker mindset?
Letās distill it based on an interesting and very exciting example.
When you audit the system, yes, you need to distill it to the core 15%. Yes, you need to properly time-manage the process.
But most importantly ā and itās the hardest part so far ā is to think of everything as ālayersā and understand that each layer has its own respective vulnerabilities, constraints, and protections.
You may audit a simple staking contract on Solana and be sure that it has no bugsā¦
Butā¦.
Are you sure you understand the core layers of the system you audit?
If itās a simple contract built on Solana, which layers do we have?
We have:
- Contract layer
- System layer (*native Solana)
Ok. Now you see, you may understand the Contract layer, the actual staking logic precisely, but the system layer you can lack specific knowledge.
Letās take a look at a small example from a staking contract.

What do we see??
Itās a simple transferā¦
We transfer from the source PDA to the destination account a specific amount.
What could go wrong?
Yes, we lack a bit of context about what the system does, but it doesnāt matter in such a case, what matters is the simple transfer.
Letās play around with the system layer of solana, and what constraints it can introduce that can lead to the bugsā¦
If you are coming from EVM, you know that when we execute the transfer of native tokens via .call, we know
- the difference between
.calland.transfer - 63/64 gas rule
- return bomb attack case
So, if you look on the function that executes the call, you intuitively think about following cases and how they can fit.
Solana is different, and each chain is different.
The future is multichain.
The future of being a solid auditor is the ability to audit many chains and have deep knowledge of each chain's behaviour.
When it comes to Solana, we may ask.
How does the native behavior of transferring native tokens work on Solana?
Once we pose such question, we will search articles, read X and watch youtube videos.
Or we will go to the native solana code and see how it works.
And what we will discover there?
We will discover that simple transfer of sol isnāt as simple as it seems and there are 3 cases where the transfer of sol can be stuck.
Bug #1 - Solana account state
Every Solana account must have enough SOL to be rent exempt
Here is what it means:

So, there are 3 states:
Uninitialised= no SOL at allRentPaying=sol_balance<rent_exempt_min(data_len), butsol_balance> 0RentExempt=sol_balance>rent_exempt_min(data_len)
And if we take a look at the Solana run time logic, we observe that we canāt transition:
- go from
rent-exempt ā rent-paying - credit lamports into a non-rent-exempt account
- go from
0 ā small amount

It means, that we can leverage it, and potentially achieve a DoS scenario if it isnāt taken into an account.
Bug #2 - We canāt send SOL to an executable account.
On Solana, every account has a structure, and thereās a parameter called āexecutable.ā
The executable flag is an old marker that tells Solana: āthis account is program code.ā
Because code doesnāt change, Solana treats it as read-only and runs it faster instead of handling it like a normal account.

And it means,
even if the executable is rent exempt, it will reject the direct transfer
Hereās the actual code piece from the native Solana code:

- You can create an executable account
- You can make it rent-exempt at creation time
- You can fund it as part of the same transaction (during creation / deployment)
But you canāt send the funds to it directly.
Now imagine a contract where you can store any address, and potentially achieve DoSā¦
This was a basic example on how solana transfers might fail.
But it teaches us more than it seems.
It teaches us that every time you audit any system you must think about the underlying systems too, that make possible to code logic to run.
Everything is a state transition.
Every state transition has rules. You must understand these rules.
- Where do the rules come from? ā From native chain behavior.
- You must check native chain behavior first to understand how transitions work.
All of these bugs proceed from Solana's core.
Next time you work, you need to deeply research the native layer.
That's what "research" actually meansā
Not just how the code works,
But how the underlying tech works that makes the code work.
And if you go deeper, if you look at things no one dares to look at,
You will find bugs.
For most auditors, a simple transfer would be straightforward.
But for seniors, it will be a playground for bugs.