Saturday, October 11, 2025
HomeอีเธอเรียมCVE-201025-30147-กรณีที่อยากรู้อยากเห็นของกลุ่มย่อยตรวจสอบ Besu

CVE-201025-30147-กรณีที่อยากรู้อยากเห็นของกลุ่มย่อยตรวจสอบ Besu


ขอบคุณ Marius van der Wijden สำหรับการสร้างกรณีทดสอบและ statetest และเพื่อช่วยทีม Besu ยืนยันปัญหา นอกจากนี้ความรุ่งโรจน์ของทีม Besu ทีมรักษาความปลอดภัย EF และ Kevaundray Wedderburn นอกจากนี้ต้องขอบคุณ Justin Traglia, Marius van der Wijden, Benedikt Wagner และ Kevaundray Wedderburn สำหรับการพิสูจน์อักษร หากคุณมีคำถาม/ความคิดเห็นอื่น ๆ หาฉันบน Twitter ที่ @Asanso

tl; drBesu Ethereum Execution Shopper เวอร์ชัน 25.2.2 ได้รับความทุกข์ทรมานจากก ปัญหาฉันทามติ เกี่ยวข้องกับ EIP-196EIP-197 การจัดการสัญญาล่วงหน้าสำหรับเส้นโค้งรูปไข่ alt_bn128 (AKA BN254) ปัญหาได้รับการแก้ไขในการเปิดตัว 25.3.0
ที่นี่ เป็นรายงาน CVE เต็มรูปแบบ

NB: ส่วนหนึ่งของโพสต์นี้ต้องการความรู้เกี่ยวกับเส้นโค้งรูปไข่ (การเข้ารหัส)

การแนะนำ

ที่ BN254 เส้นโค้ง (หรือที่รู้จักกันในชื่อ alt_bn128) เป็นเส้นโค้งรูปไข่ที่ใช้ใน Ethereum สำหรับการดำเนินการเข้ารหัส รองรับการดำเนินงานเช่นการเข้ารหัสเส้นโค้งรูปไข่ทำให้เป็นสิ่งสำคัญสำหรับคุณสมบัติ Ethereum ที่หลากหลาย ก่อน EIP-2537 และการเปิดตัว Pectra ล่าสุด BN254 เป็นเส้นโค้งการจับคู่เพียงอย่างเดียวที่ได้รับการสนับสนุนโดย Ethereum Digital Machine (EVM) EIP-196 และ EIP-197 กำหนดสัญญาที่รวบรวมไว้ล่วงหน้าสำหรับการคำนวณที่มีประสิทธิภาพบนเส้นโค้งนี้ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ BN254คุณสามารถอ่านได้ ที่นี่

ช่องโหว่ด้านความปลอดภัยที่สำคัญในการเข้ารหัสเส้นโค้งรูปไข่คือ การโจมตีเส้นโค้งที่ไม่ถูกต้องแนะนำครั้งแรกในกระดาษ “ การโจมตีที่แตกต่างกันในระบบ Cryptosystems รูปไข่”– การโจมตีนี้มีเป้าหมายการใช้คะแนนที่ไม่อยู่บนเส้นโค้งรูปไข่ที่ถูกต้องซึ่งนำไปสู่ปัญหาด้านความปลอดภัยที่อาจเกิดขึ้นในโปรโตคอลการเข้ารหัส สำหรับเส้นโค้งคำสั่งซื้อที่ไม่ใช่พรี 2g_2

เพื่อตรวจสอบว่าจุดหนึ่ง P ใช้ได้ในการเข้ารหัสเส้นโค้งรูปไข่ต้องตรวจสอบว่าจุดนั้นอยู่บนเส้นโค้งและเป็นของกลุ่มย่อยที่ถูกต้อง นี่เป็นสิ่งสำคัญโดยเฉพาะอย่างยิ่งเมื่อประเด็น P มาจากแหล่งที่ไม่น่าเชื่อถือหรืออาจเป็นอันตรายเนื่องจากจุดที่ไม่ถูกต้องหรือสร้างขึ้นเป็นพิเศษสามารถนำไปสู่ช่องโหว่ด้านความปลอดภัย ด้านล่างนี้เป็น pseudocode ที่แสดงกระบวนการนี้:

# Pseudocode for checking if level P is legitimate
def is_valid_point(P):
    if not is_on_curve(P):    
        return False
    if not is_in_subgroup(P):
        return False
    return True

การตรวจสอบสมาชิกกลุ่มย่อย

ดังที่ได้กล่าวไว้ข้างต้นเมื่อทำงานกับจุดกำเนิดที่ไม่รู้จักใด ๆ มันเป็นสิ่งสำคัญที่จะตรวจสอบว่ามันเป็นของกลุ่มย่อยที่ถูกต้องนอกเหนือจากการยืนยันว่าจุดอยู่บนเส้นโค้งที่ถูกต้อง สำหรับ BN254นี่เป็นสิ่งจำเป็นสำหรับ 2g_2

อย่างไรก็ตามวิธีนี้อาจมีค่าใช้จ่ายสูงในทางปฏิบัติเนื่องจากขนาดใหญ่ของนายก RRโดยเฉพาะอย่างยิ่งสำหรับ 2g_2

บางเฉดสีที่แท้จริง

อย่างที่คุณเห็นจากไทม์ไลน์ในตอนท้ายของโพสต์นี้เราได้รับรายงานเกี่ยวกับข้อผิดพลาดที่มีผลต่อ Pectra EIP-2537 บน Besu ส่งผ่าน การแข่งขันการตรวจสอบ Pectra– เราสัมผัสกับปัญหานั้นเพียงเล็กน้อยที่นี่ในกรณีที่นักข่าวดั้งเดิมต้องการครอบคลุมรายละเอียดเพิ่มเติม โพสต์นี้มุ่งเน้นไปที่ BN254 โดยเฉพาะ EIP-196EIP-197 ความอ่อนแอ

นักข่าวดั้งเดิมสังเกตว่าใน Besu, the is_in_subgroup ตรวจสอบก่อน is_on_curve ตรวจสอบ. นี่คือตัวอย่างของสิ่งที่อาจมีลักษณะ:

# Pseudocode for checking if level P is legitimate
def is_valid_point(P):
    if not is_in_subgroup(P):    
        if not is_on_curve(P):
            return False  
        return False
    return True

เราตัดสินใจที่จะดูรหัส BEN สำหรับเส้นโค้ง BN เพื่อความประหลาดใจที่ยิ่งใหญ่ของฉันเราพบบางสิ่งบางอย่าง แบบนี้

# Pseudocode for checking if level P is legitimate
def is_valid_point(P):
    if not is_in_subgroup(P):    
        return False
    return True

เดี๋ยวก่อนอะไร? ไฟล์ is_on_curve ตรวจสอบ? อย่างแน่นอน-ไม่มีใคร !!!

ตอนนี้เพื่อหลีกเลี่ยง is_valid_point ฟังก์ชั่นสิ่งที่คุณต้องทำคือให้จุด ที่อยู่ในกลุ่มย่อยที่ถูกต้อง แต่ไม่ได้อยู่บนเส้นโค้ง

แต่เดี๋ยวก่อน – เป็นไปได้หรือไม่?

ใช่-แต่สำหรับเส้นโค้งที่เลือกมาเป็นพิเศษเท่านั้น โดยเฉพาะถ้าสองเส้นโค้ง เกี่ยวกับ isomorphicพวกเขาแบ่งปันโครงสร้างกลุ่มเดียวกันซึ่งหมายความว่าคุณสามารถสร้างจุดจากเส้นโค้ง isomorphic ที่ผ่านการตรวจสอบกลุ่มย่อย แต่ไม่ได้อยู่บนเส้นโค้งที่ตั้งใจไว้

ลับๆล่อๆใช่มั้ย

คุณพูดว่า isomorpshism หรือไม่?

อย่าลังเลที่จะข้ามส่วนนี้หากคุณไม่สนใจรายละเอียด – เรากำลังจะลึกลงไปในคณิตศาสตร์

อนุญาต fถาม mathbb {f} _q

y2x3อันxy^2 = x^3 + a x + b

ที่ไหน อันอัน และ เป็นค่าคงที่ 4อัน327204a^3 + 27b^2 neq 0

เส้นโค้ง isomorphisms

มีการพิจารณาเส้นโค้งรูปไข่สองเส้น เกี่ยวกับ isomorphic^(เพื่อใช้ประโยชน์จากช่องโหว่ที่อธิบายไว้ที่นี่เราต้องการจริงๆ เกี่ยวกับ isomorphic เส้นโค้งไม่ใช่แค่ เป็นไปไม่ได้ เส้นโค้ง) หากพวกเขาสามารถเกี่ยวข้องกับการเปลี่ยนแปลงของตัวแปรเลียนแบบ การเปลี่ยนแปลงดังกล่าวรักษาโครงสร้างกลุ่มและตรวจสอบให้แน่ใจว่าการเพิ่มจุดยังคงสอดคล้องกัน มันสามารถแสดงให้เห็นว่าการเปลี่ยนแปลงที่เป็นไปได้เพียงอย่างเดียวระหว่างสองเส้นโค้งในรูปแบบweiersstraßสั้น ๆ เป็นรูปทรง:

xyอี2xอี3y(x, y) mapsto (e^2 x, e^3 y)

สำหรับบางคนที่ไม่ใช่ศูนย์ อีfถามe in mathbb {f} _q

y2x3อันอี4xอี6y^2 = x^3 + a e^{4} x + b e^{6}

ที่ JJ-ไม่แปรปรวน ของเส้นโค้งหมายถึง:

J22714อัน34อัน3272j = 1728 frac {4a^3} {4a^3 + 27b^2}

ทุกองค์ประกอบของ fถาม mathbb {f} _q

การเอาเปรียบ

ณ จุดนี้สิ่งที่เหลืออยู่คือการสร้างจุดที่เหมาะสมบนเส้นโค้งที่เลือกอย่างระมัดระวังและ voilà—le Jeu est fait

คุณสามารถลองใช้เวกเตอร์ทดสอบโดยใช้ ลิงค์นี้ และเพลิดเพลินกับการนั่ง

บทสรุป

ในโพสต์นี้เราสำรวจช่องโหว่ในการดำเนินการตรวจสอบเส้นโค้งรูปไข่ของ Besu ข้อบกพร่องนี้หากถูกเอาเปรียบสามารถอนุญาตให้ผู้โจมตีสามารถสร้างจุดที่ผ่านการตรวจสอบสมาชิกกลุ่มย่อย แต่ไม่ได้อยู่บนเส้นโค้งจริง ทีม Besu ได้แก้ไขปัญหานี้ในการเปิดตัว 25.3.0 ในขณะที่ปัญหาถูกแยกออกเป็น Besu และไม่ส่งผลกระทบต่อลูกค้ารายอื่น แต่ความแตกต่างเช่นนี้ทำให้เกิดข้อกังวลที่สำคัญสำหรับระบบนิเวศหลายลูกค้าเช่น Ethereum การตรวจสอบการเข้ารหัสที่ไม่ตรงกันระหว่างลูกค้าอาจส่งผลให้เกิดพฤติกรรมที่แตกต่าง – ที่ใดที่ลูกค้าหนึ่งคนยอมรับการทำธุรกรรมหรือบล็อกที่คนอื่นปฏิเสธ ความไม่ลงรอยกันแบบนี้อาจเป็นอันตรายต่อฉันทามติและบ่อนทำลายความไว้วางใจในความสม่ำเสมอของเครือข่ายโดยเฉพาะอย่างยิ่งเมื่อข้อบกพร่องที่ลึกซึ้งยังคงไม่มีใครสังเกตเห็นในการใช้งาน เหตุการณ์นี้ชี้ให้เห็นว่าทำไมการทดสอบอย่างเข้มงวดและแนวทางปฏิบัติด้านความปลอดภัยที่แข็งแกร่งจึงมีความสำคัญอย่างยิ่ง – โดยเฉพาะอย่างยิ่งในระบบ blockchain ซึ่งแม้แต่ความผิดพลาดเล็กน้อยในการเข้ารหัสลับก็สามารถกระเพื่อมออกไปสู่ช่องโหว่ที่สำคัญของระบบ ความคิดริเริ่มเช่นการแข่งขัน Pectra Audit มีบทบาทสำคัญในการทำให้เกิดปัญหาเหล่านี้ในเชิงรุกก่อนที่จะถึงการผลิต ด้วยการส่งเสริมสายตาที่หลากหลายในการกลั่นกรองรหัสความพยายามดังกล่าวเสริมสร้างความยืดหยุ่นโดยรวมของระบบนิเวศ

เส้นเวลา

  • 15-03-2025-บั๊กที่มีผลต่อ Pectra EIP-2537 บน Besu รายงานผ่าน การแข่งขันการตรวจสอบ Pectra
  • 17-03-2025-ค้นพบและรายงานปัญหา EIP-196/EIP-197 ให้กับทีม BESU
  • 17-03-2025-Marius van der Wijden สร้างกรณีทดสอบและ statetest เพื่อทำซ้ำปัญหา
  • 17-03-2025-ทีม Besu ยอมรับทันทีและ ที่ตายตัว ปัญหา



RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

ความเห็นล่าสุด