बंद करने के लिए ESC दबाएँ

Fake GIWA Chain Attack: फर्जी L2 ब्रिज से 766 ETH चोरी की तकनीकी समीक्षा

जीवा (GIWA) फेक मेनnet स्कैम का एक विस्तृत विश्लेषण, जिसमें 27 सितंबर 2026 को उपयोगकर्ताओं के 766 ETH चोरी हो गए और फेक RPC इंटीग्रेशन के कारण DYORSWAP डिसेंट्रलाइज्ड एक्सचेंज पर हमला हुआ।

मास्टरक्लास डिसेप्शन: ब्लॉकचेन को कैसे नकली बनाया जाता है

मैं सिक्योरिटी मॉनिटरिंग फीड स्क्रॉल कर रहा था और तभी... लगभग हाथ से कॉफी गिर ही गई थी। सात सौ छियासठ ईथर। सीधे हवा में गायब। अगर यह कोई क्लासिक फ़ishing हमला होता—जैसे कि नकली लाइब्रेरी या फ्लैश-लोन कॉन्ट्रैक्ट एक्सप्लॉइट—तो मैं ज्यादा हैरान नहीं होता, क्योंकि मैंने ऐसे कई मामले देखे हैं। लेकिन यह स्कीम काफी अलग और शातिर थी। स्कैमर्स ने एक नकली GIWA मेननेट खड़ा किया, उसे किसी और के DEX से जोड़ दिया और उपयोगकर्ताओं के लाखों डॉलर साफ़ कर दिए।

आइए इस घटना की गहराई से समीक्षा करते हैं, क्योंकि आर्किटेक्चर के लिहाज से इसमें एक इंजीनियर के देखने लायक बहुत कुछ है। एक इन्फोसैक विशेषज्ञ और एक्टिव सीटीओ (CTO) के रूप में, मैं इस तरह के कारनामे के दुस्साहस की दाद देता हूँ, हालाँकि DYORSWAP की टीम के लिए वाकई बुरा लग रहा है।

रुको, आखिर कोई लेयर 2 (L2) ब्लॉकचेन को "नकली" कैसे बना सकता है? आम आदमी के लिए यह बात दीवानगी जैसी लग सकती है, लेकिन EVM की दुनिया में कोई भी नेटवर्क कोई जादू नहीं है—यह केवल कुछ सम्मेलनों (conventions) और RPCएंडपॉइंट्स का एक सेट है।

अटैकर्स ने एक ओपन-सोर्स स्टैक लिया (संभवतः OP Stack जैसे किसी प्रोजेक्ट का फोर्क) और एक नोड डिप्लॉय कर दिया। लेकिन सिर्फ सर्वर खड़ा करना काफी नहीं है; आपको वॉलेट्स और ऐप्स को यह विश्वास दिलाना होगा कि यह दक्षिण कोरियाई एक्सचेंज Upbit का आधिकारिक प्रोडक्ट है, जिसका GIWA नेटवर्क अभी तक आधिकारिक तौर पर मेननेट पर लॉन्च ही नहीं हुआ था।

उन्होंने नोड कॉन्फ़िगरेशन में आधिकारिक Chain ID—नंबर 9134—को हार्डकोडिंग कर दिया, जिसे GIWA टीम ने अपने आने वाले ब्लॉकचेन के लिए पहले ही रजिस्टर कर रखा था। और यहीं पर पूरे इकोसिस्टम की सबसे बड़ी कमज़ोरी छिपी है: मेटामास्क जैसे वॉलेट नेटवर्क को क्रिएटर के साथ किसी क्रिप्टोग्राफिक ट्रस्ट के आधार पर नहीं, बल्कि कॉन्फ़िगरेशन स्ट्रिंग्स और आईडी के आधार पर सत्यापित करते हैं।

और यहीं पर DYORSWAP DEX से चूक हो गई। उन्होंने नए नेटवर्क के हाइप का सबसे पहले फायदा उठाने की जल्दबाजी में इस नकली RPC को अपने इन्फ्रास्ट्रक्चर में जोड़ लिया।

आप जानते हैं, जब मैं खुद कभी स्मार्ट कॉन्ट्रैक्ट्स के ऑडिट किया करता था, तो हम हमेशा सोचते थे: चलो ठीक है, फ्रंट-एंड को स्पूफ किया जा सकता है, RPC बदला जा सकता है, लेकिन ब्रिज का स्मार्ट कॉन्ट्रैक्ट एकदम पवित्र होता है—क्योंकि उसका कोड सीधे एथेरियम ब्लॉकचेन पर रहता है! और यहीं पर इस हमले का सबसे शातिर जाल बिछाया गया था।

यूजर्स को शक क्यों नहीं हुआ?

यूजर्स को कोई शक इसलिए नहीं हुआ क्योंकि वह ब्रिज बिल्कुल एथेरियम से GIWA L2 नेटवर्क में फंड ट्रांसफर करने वाले नेटिव इंटरफ़ेस जैसा दिख रहा था। लोगों ने मेटामास्क में ट्रांजैक्शन साइन किए और अपनी गाढ़ी कमाई का ETH मेननेट पर मौजूद डिपॉजिट स्मार्ट कॉन्ट्रैक्ट में भेज दिया।

तकनीकी रूप से, इस कॉन्ट्रैक्ट को अटैकर्स ने इस तरह से कोड किया था कि वह एक स्टैंडर्ड डिपॉजिट लोकेटर की नकल कर सके। जैसे ही मुख्य नेटवर्क पर ट्रांजैक्शन वैलिडेट होती, स्कैमर्स को फंड्स का पूरा कंट्रोल मिल जाता था। बदले में यूजर को नकली L2 के बैलेंस पर फर्जी और बेबुनियाद टोकन दिखाई देने लगते थे। स्क्रीन पर आंकड़े बढ़ते जाते थे जिससे सफल ब्रिज होने का भ्रम पैदा होता था, जबकि असली ETH पहले ही स्कैमर्स के पते पर उड़ चुका होता था और मिक्सर्स के जरिए गायब हो चुका था। अंत में, 1,335 यूनीक एड्रेस इस जाल में फंस गए और लगभग 767.7 ETH का चूना लग गया। उन्होंने गैस फीस को कम से कम रखते हुए लगभग 766.3 ETH को बिल्कुल साफ तरीके से निकाल लिया।

DYORSWAP की टीम ने वाकई सराहनीय काम किया और अपनी जेब से 200 से ज्यादा ETH निकालकर पीड़ितों को मुआवजा दिया। मैं कंपनी की इस प्रतिष्ठा के प्रति उनकी प्रतिबद्धता का सम्मान करता हूँ, भले ही उन्हें बाहरी RPC कनेक्शन वैलिडेशन की इस आर्किटेक्चरल कमी को जल्द से जल्द ठीक करना पड़े।

अब इसके प्रैक्टिकल हिस्से पर आते हैं। अगर आपको नए ब्लॉकचेन को सबसे पहले टेस्ट करना पसंद है, तो आप अगली बार किसी स्कैमर के स्पॉन्सर बनने से कैसे बच सकते हैं? मैंने वॉलेट के जरिए किसी भी नए नेटवर्क से जुड़ने से पहले RPC नोड्स को वेरीफाई करने के लिए आप लोगों के वास्ते पायथन (Python) में एक छोटा सा चेकिंग स्क्रिप्ट तैयार किया है।

#!/usr/bin/env python3
import requests
def rpc_call(rpc_url, method, params=None):
    if params is None:
        params = []
    payload = {
        "jsonrpc": "2.0",
        "method": method,
        "params": params,
        "id": 1
    }
    response = requests.post(rpc_url, json=payload, timeout=10)
    response.raise_for_status()
    data = response.json()
    if "error" in data:
        raise RuntimeError(f"{method}: {data['error']}")
    return data.get("result")
def verify_evm_node(rpc_url, expected_chain_id):
    try:
        chain_id_hex = rpc_call(rpc_url, "eth_chainId")
        chain_id = int(chain_id_hex, 16)
        net_version = rpc_call(rpc_url, "net_version")
        client_version = rpc_call(rpc_url, "web3_clientVersion")
        block_number_hex = rpc_call(rpc_url, "eth_blockNumber")
        block_number = int(block_number_hex, 16)
        latest_block = rpc_call(
            rpc_url,
            "eth_getBlockByNumber",
            ["latest", False]
        )
        print("=" * 60)
        print(f"RPC URL         : {rpc_url}")
        print(f"Chain ID        : {chain_id}")
        print(f"Expected ChainID : {expected_chain_id}")
        print(f"Net Version     : {net_version}")
        print(f"Client Version   : {client_version}")
        print(f"Block Number     : {block_number}")
        if latest_block:
            print(f"Latest Block Hash: {latest_block.get('hash')}")
            print(f"Latest Block Num : {int(latest_block['number'], 16)}")
            print(f"Parent Hash      : {latest_block.get('parentHash')}")
            print(f"Timestamp        : {int(latest_block['timestamp'], 16)}")
        print("=" * 60)
        checks = []
        checks.append(chain_id == expected_chain_id)
        try:
            checks.append(int(net_version) == expected_chain_id)
        except Exception:
            checks.append(False)
        checks.append(block_number > 0)
        checks.append(
            latest_block is not None
            and latest_block.get("hash")
            and latest_block.get("parentHash")
            and latest_block.get("number")
        )
        if all(checks):
            print("VERIFICATION PASSED")
            return True
        print("VERIFICATION FAILED")
        return False
    except Exception as e:
        print(f"ERROR: {e}")
        return False
if __name__ == "__main__":
    verify_evm_node(
        "https://your-rpc-endpoint",
        9134
    )

मुख्य नियम याद रखें: किसी भी संदिग्ध ट्विटर अकाउंट या बिना वेरिफाइड DEX द्वारा शेयर की गई नेटवर्क लिस्ट पर तब तक भरोसा न करें, जब तक कि आधिकारिक प्रोजेक्ट अपने वेरिफाइड चैनल्स (सोशल मीडिया पर नहीं, बल्कि अपनी आधिकारिक डॉक्यूमेंटेशन या वैलिड SSL सर्टिफिकेट वाली ऑफिशियल वेबसाइट पर) के माध्यम से सटीक एंडपॉइंट्स पब्लिश न कर दे। Upbit एक्सचेंज ने साफ तौर पर कहा है कि उनका मेननेट अभी लॉन्च ही नहीं हुआ है, इसलिए वर्तमान में घूम रहे सभी RPC सिर्फ हवा में तीर चलाना और सरासर स्कैम हैं।

इस ब्लॉग पोस्ट का सारांश इसके साथ बनाएं:

FAQ

हमलावरों ने GIWA के आधिकारिक अप्रकाशित Chain ID 9134 का उपयोग करके एक फर्जी EVM-संगत Layer 2 नोड तैनात किया, धोखाधड़ी वाले ब्रिज डिपॉजिट अनुबंध को जोड़ा और 1,335 वॉलेट उपयोगकर्ताओं को असली ETH स्थानांतरित करने के लिए गुमराह किया।

विकेंद्रीकृत एक्सचेंज ने केवल Chain ID 9134 के मिलान के आधार पर नेटवर्क की वैधता की पुष्टि की, और Upbit टीम की आधिकारिक घोषणाओं या क्रिप्टोग्राफिक सत्यापन की जांच किए बिना अपने सिस्टम को जोड़ दिया।

डेवलपर्स और उपयोगकर्ताओं को net_version जैसे मूल तरीकों से RPC प्रतिक्रियाओं का क्रॉस-वेरीफिकेशन करना चाहिए, eth_getBlockByNumber का उपयोग करके ब्लॉक हेडर की निरंतरता की जांच करनी चाहिए और केवल आधिकारिक तौर पर सत्यापित दस्तावेजों पर भरोसा करना चाहिए।
Oleg Filatov

As the Chief Technology Officer at EXMON Exchange, I focus on building secure, scalable crypto infrastructure and developing systems that protect user assets and privacy.

With over 15 years in cybersecurity, blockchain, and DevOps, I specialize in smart contract analysis, threat modeling, and secure system architecture.

At EXMON Academy, I share practical insights from real-world...

...

अपनी राय साझा करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। अनिवार्य फ़ील्ड चिह्नित हैं *