Forwarded from Solidity. Смарт контракты и аудит
Задача 33
На канале ранее уже вышло 32 задачи! На годовщину канала можно будет выпустить большой задачник для аудитора в pdf, по которой смогут учиться все желающие.
Ну, а пока, достаточно сложная задача с двумя уязвимостями. Сможете найти их?
Решение
Во-первых, из-за работы функции с memory, само состояние маппинга не будет обновлено, более того при работе с callback вызовом, в данном случае, возможна DoS атака.
#task
На канале ранее уже вышло 32 задачи! На годовщину канала можно будет выпустить большой задачник для аудитора в pdf, по которой смогут учиться все желающие.
Ну, а пока, достаточно сложная задача с двумя уязвимостями. Сможете найти их?
Решение
Forwarded from Solidity. Смарт контракты и аудит
Задача 34
Эта задача была помечена как Med Risk на code4rena.
Порой мне кажется, что подобные случаи 1 на 1000, а то и больше. Ну, какая-то слишком простая ошибка.
Решение
Все дело в transfer() и ее лимите на использование газа. Если в контракте принимающего будет fallback функция с дополнительными действиями при приеме эфира, то withdrawPayments() будет откатываться. В общем, лучше использовать call вызов.
#task
Эта задача была помечена как Med Risk на code4rena.
Порой мне кажется, что подобные случаи 1 на 1000, а то и больше. Ну, какая-то слишком простая ошибка.
Решение
Forwarded from Solidity. Смарт контракты и аудит
Задача 35
Длинная задача на внимательность. Порой бывает, что разработчик отвлекается от написания кода и пропускает некоторые моменты. Поняли, в чем дело?
Решение
Разработчики забыли добавить модификатор к функции, из-за этого пользователи могут забирать токены в любое время.
#task
Длинная задача на внимательность. Порой бывает, что разработчик отвлекается от написания кода и пропускает некоторые моменты. Поняли, в чем дело?
Решение
Forwarded from Solidity. Смарт контракты и аудит
Задача 36
Задача от Immunefi. Как всегда они идут в ногу со временем. Уже несколько раз натыкался на эту проблему в других контрактах. Вроде, даже была подобная на канале ранее. Узнали?
Решение
Проблема кроется в переводе uint256 amount в uint160, из-за чего транзакция может откатиться. В этом случае лучше использовать сторонние библиотеки, типа safeCast.
#task
Задача от Immunefi. Как всегда они идут в ногу со временем. Уже несколько раз натыкался на эту проблему в других контрактах. Вроде, даже была подобная на канале ранее. Узнали?
Решение
Forwarded from Solidity. Смарт контракты и аудит
Задача 37
И последняя на сегодня, снова же от Immunefi. Как подсказка: внимание на комментарий в коде!
Решение
Представленная функция являлась callback функцией флеш займа биржи dYdX. Дело в том, что любой пользователь мог использовать ее, чтобы переписать разрешение биржи на перевод всех ее токенов на адрес пользователя. Интересно, да?
#task
И последняя на сегодня, снова же от Immunefi. Как подсказка: внимание на комментарий в коде!
Решение
Forwarded from Solidity. Смарт контракты и аудит
Задача 38
И первая задача на сегодня из задачника Quill CTF. Если вы решали задачи Damn Vulnerable Defi, то скорее всего сможете быстро понять, в чем тут дело.
Если же нет, то маленькой подсказкой будет: не полагайтесь на баланс контракта в таких действиях.
Решение
UPD. Изначальное решение было не правильным. Смотрите обновленный пост ниже.
#task
И первая задача на сегодня из задачника Quill CTF. Если вы решали задачи Damn Vulnerable Defi, то скорее всего сможете быстро понять, в чем тут дело.
Если же нет, то маленькой подсказкой будет: не полагайтесь на баланс контракта в таких действиях.
Решение
UPD. Изначальное решение было не правильным. Смотрите обновленный пост ниже.
#task
Forwarded from Solidity. Смарт контракты и аудит
Задача с shares
Достаточно распространенная проблема в контрактах. Как я помню, немного похожая задача уже была на канале ранее. Вряд ли ее сможет понять или решить новичок, так как тут уже нужно знать про возможную проблему.
Решение
По сути это очередная задача, где первый депозитор может сломать всю систему минта новых shares. Из-за того, что расчет самых первых shares идет по формуле Math.sqrt(baseTokenAmount * fractionalTokenAmount), хакер может добавить вначале, например, по 1 baseToken и 1 quoteToken, в итоге минт будет всего 1, исходя из формулы. Затем хакер добавляет 1е9 токенов каждого вида, из чего получает стоимость 1 wei LP токена равную 1е9 токенов base или quote.
И если нормальный пользователь захочет добавить свои токены в пул, то ему нужно будет указывать количество не менее 1е9 токенов, чтобы получить минт больше 0.
В таких случаях, при первом добавлении в пул рекомендуют делать минт 1000 токенов на нулевой адрес, чтобы избежать данной уязвимости.
#task
Достаточно распространенная проблема в контрактах. Как я помню, немного похожая задача уже была на канале ранее. Вряд ли ее сможет понять или решить новичок, так как тут уже нужно знать про возможную проблему.
Решение
И если нормальный пользователь захочет добавить свои токены в пул, то ему нужно будет указывать количество не менее 1е9 токенов, чтобы получить минт больше 0.
В таких случаях, при первом добавлении в пул рекомендуют делать минт 1000 токенов на нулевой адрес, чтобы избежать данной уязвимости.
Forwarded from Solidity. Смарт контракты и аудит
Комментарий к задаче 38 от Quill CTF
Спасибо @SovaSlava за бдительность в решении задач на канале! В задаче 38, та, в которой я решил, что уязвимость в флеш займе, однако все оказалось куда сложнее.
Я сначала решил, что это просто выжимка из задачи, но оказалось, что это полноценный контракт для практики взлома, где по условию на контракте были 10 Эфиров, а у вас 1, и нужно было забрать все себе. Вот ссылка на задачу.
Даже не знаю, нужно ли расписывать все решение по шагам. Оставлю пока на самостоятельное изучение. Мало ли, кто-то проходит данный задачник сам и не хочет получить готовое решение.
Для остальных подсказка под спойлером.
Уязвимость здесь скрывается не в функции execute, как можно подумать при первом взгляде, а в withdrawAll. Грубо говоря, нам сначала нужно написать контракт атаки, с функциями receive() и отправки эфира обратно владельцу. Далее, делая депозит в 1 эфир и "жонглируя апрувами и перекидыванием баланса эфира" с нашего адреса на контракт атаки и обратно, получить весь баланс weth после нескольких итераций. Звучит немного запутано, но понять вы сможете только после хорошего вникания в задачу.
#ctf #quill #task
Спасибо @SovaSlava за бдительность в решении задач на канале! В задаче 38, та, в которой я решил, что уязвимость в флеш займе, однако все оказалось куда сложнее.
Я сначала решил, что это просто выжимка из задачи, но оказалось, что это полноценный контракт для практики взлома, где по условию на контракте были 10 Эфиров, а у вас 1, и нужно было забрать все себе. Вот ссылка на задачу.
Даже не знаю, нужно ли расписывать все решение по шагам. Оставлю пока на самостоятельное изучение. Мало ли, кто-то проходит данный задачник сам и не хочет получить готовое решение.
Для остальных подсказка под спойлером.
Forwarded from Sergey Boogerwooger
Сегодня всплыло в одном из чатиков, считаю интересный хак, аудиторам полезно бы знать: https://swarm.ptsecurity.com/binance-smart-chain-token-bridge-hack/
PT SWARM
Binance Smart Chain Token Bridge Hack
Backstory On October 6th 2022, the BSC Token Hub bridge (hereinafter BSC), belonging to the largest cryptocurrency exchange, Binance, was hacked. This was one of the largest cryptocurrency hacks ever. BSC ensures the interaction between the Binance Beacon…
Крутая штука
https://github.com/coinspect/learn-evm-attacks
Можно воспроизвести старые взломы. Тесты, контракты и объяснения как произошел взлом. Используется forge
https://github.com/coinspect/learn-evm-attacks
Можно воспроизвести старые взломы. Тесты, контракты и объяснения как произошел взлом. Используется forge
GitHub
GitHub - coinspect/learn-evm-attacks: 🚀 Try the Learn EVM Explorer we just launched!!!
🚀 Try the Learn EVM Explorer we just launched!!! Contribute to coinspect/learn-evm-attacks development by creating an account on GitHub.
DeFiHackLabs (https://github.com/SunWeb3Sec/DeFiHackLabs): Reproduce DeFi hacked incidents using Foundry.
DeFiVulnLabs
(https://github.com/SunWeb3Sec/DeFiVulnLabs): To learn common smart contract vulnerabilities using Foundry.
DeFiVulnLabs
(https://github.com/SunWeb3Sec/DeFiVulnLabs): To learn common smart contract vulnerabilities using Foundry.
GitHub
GitHub - SunWeb3Sec/DeFiHackLabs: Reproduce DeFi hacked incidents using Foundry.
Reproduce DeFi hacked incidents using Foundry. Contribute to SunWeb3Sec/DeFiHackLabs development by creating an account on GitHub.
Разбора взлома протокола Beanstalk
Beanstalk, Ethereum-based stablecoin protocol, потерял $182 миллиона в результате flash loan атаки 17 апреля 2022 года.
Beanstalk использует протокол децентрализованного управления. Это включает в себя функцию EmergencyCommit, которая может быть одобрена квалифицированным большинством (2/3 голосов) и реализована через 24 часа.
Атака Beanstalk была осуществлена с помощью двух вредоносных dao proposals. Эти смарт-контракты (предложения Beanstalk #18 и #19) опустошили смарт-контракт Beanstalk и отправили украденные токены на адрес злоумышленника, а также на адрес для пожертвований в Украине.
Чтобы предложения были одобрены, злоумышленнику необходимо было контролировать 2/3 голосов за протокол управления.
По истечении однодневного периода ожидания злоумышленник смог использовать флэш лоан для внесения крупного депозита. Это позволило им контролировать 79% голосов по протоколу управления, что намного больше, чем 2/3, необходимые для одобрения предложения.
С помощью этой возможности злоумышленник может в одностороннем порядке одобрить свое предложение с помощью EmergencyCommit. Как только вредоносное предложение было реализовано, значение, хранящееся в протоколе Beanstalk, было передано фонду «Украина» и злоумышленнику, которые использовали его для погашения своего мгновенного кредита.
В итоге злоумышленник истощил пул ликвидности своих активов и ушел с 76 миллионами долларов, а BEAN упал примерно на 75% с его привязки в 1$.
Более подробнее об атаке читайте в этой статье: https://medium.com/coinmonks/beanstalk-exploit-a-simplified-post-mortem-analysis-92e6cdb17ace
Beanstalk, Ethereum-based stablecoin protocol, потерял $182 миллиона в результате flash loan атаки 17 апреля 2022 года.
Beanstalk использует протокол децентрализованного управления. Это включает в себя функцию EmergencyCommit, которая может быть одобрена квалифицированным большинством (2/3 голосов) и реализована через 24 часа.
Атака Beanstalk была осуществлена с помощью двух вредоносных dao proposals. Эти смарт-контракты (предложения Beanstalk #18 и #19) опустошили смарт-контракт Beanstalk и отправили украденные токены на адрес злоумышленника, а также на адрес для пожертвований в Украине.
Чтобы предложения были одобрены, злоумышленнику необходимо было контролировать 2/3 голосов за протокол управления.
По истечении однодневного периода ожидания злоумышленник смог использовать флэш лоан для внесения крупного депозита. Это позволило им контролировать 79% голосов по протоколу управления, что намного больше, чем 2/3, необходимые для одобрения предложения.
С помощью этой возможности злоумышленник может в одностороннем порядке одобрить свое предложение с помощью EmergencyCommit. Как только вредоносное предложение было реализовано, значение, хранящееся в протоколе Beanstalk, было передано фонду «Украина» и злоумышленнику, которые использовали его для погашения своего мгновенного кредита.
В итоге злоумышленник истощил пул ликвидности своих активов и ушел с 76 миллионами долларов, а BEAN упал примерно на 75% с его привязки в 1$.
Более подробнее об атаке читайте в этой статье: https://medium.com/coinmonks/beanstalk-exploit-a-simplified-post-mortem-analysis-92e6cdb17ace
Medium
Beanstalk Exploit — A Simplified Post Mortem Analysis
Preface