1 คะแนน โดย GN⁺ 2023-06-27 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • ในป๊อปอัป Manage my account บน Android สามารถเปิดหน้าที่ไปยังเว็บไซต์ทั่วไปได้ และยังเข้าถึงได้จาก Settings และชุดแอป Google
  • เส้นทางการเข้าถึงคือผ่านแท็บ Security ของการจัดการบัญชี Google, Password Manager, ความช่วยเหลือเกี่ยวกับการเข้ารหัสบนอุปกรณ์, นโยบายความเป็นส่วนตัว และเมนู Search ตามลำดับ
  • หน้านี้สามารถเล่น YouTube ได้ด้วย แต่ไม่มีประวัติการเข้าชมหรือแถบที่อยู่ และเมื่อกดย้อนกลับจะกลับไปยังหน้าการตั้งค่าแทนประวัติเว็บ
  • ใน JavaScript console จะเห็นอ็อบเจ็กต์ mm และฟังก์ชัน closeView(), requestSecurityKeyHandshake(), updateSecurityKey() โดยยังไม่ยืนยันการใช้งานจริงของบางฟังก์ชัน
  • ตอนแรก Google ตอบว่าไม่ใช่ช่องโหว่ด้านความปลอดภัย และการ ข้ามการควบคุมโดยผู้ปกครอง ก็เป็นพฤติกรรมที่ตั้งใจไว้ แต่หลังการเปิดเผยและรายงานจากสื่อ 3 วัน ก็แจ้งว่าจะทบทวนรายงานนี้อีกครั้ง

เบราว์เซอร์ลับที่เปิดได้จากในการตั้งค่า Android

  • ในหลายแอปของ Android มีป๊อปอัป Manage my account และเข้าถึงได้จากแอปหลักอย่าง Settings และชุดแอป Google
  • หากผ่านหลายขั้นตอน ป๊อปอัปนี้จะทำงานเหมือนเบราว์เซอร์ที่สามารถไปยังเว็บไซต์ทั่วไปได้
    • Settings → Google หรือในแอปที่เลือกบัญชีได้ ให้เลือก “Manage my account”
    • ในแท็บ “Security” เลือก “Password Manager”
    • เลือกไอคอน Settings ที่มุมขวาบน
    • เลือก “Set up on-device encryption” → “Learn more about on-device encryption”
    • จากเมนูแฮมเบอร์เกอร์ ไปที่ “Privacy Policy”
    • กดเมนู 9 จุดด้านบน รอประมาณ 5 วินาที แล้วเลือก “Search” หรือไปที่รายการ Google
    • หากออกจากระบบบัญชี Google จะใช้งานเหมือนเบราว์เซอร์ที่ไปยังที่ใดก็ได้ตามต้องการ
  • ในสถานะนี้ยังสามารถ เล่นวิดีโอ YouTube ได้ และหน้าจอจะเปิดอยู่ภายในแอป Settings หรือแอปที่ใช้เข้ามาตอนแรก
  • จุดที่ต่างจากเบราว์เซอร์ทั่วไป

    • ไม่บันทึกประวัติการเข้าชม
    • เมื่อตัดจบเซสชัน จะออกจากระบบบัญชี Google ที่ล็อกอินอยู่โดยอัตโนมัติ
    • ไม่มีแถบที่อยู่
    • เมื่อกดปุ่มย้อนกลับ จะไม่กลับไปยังหน้าเว็บก่อนหน้า แต่จะกลับไปยังหน้าการตั้งค่าของ Password Manager

อ็อบเจ็กต์ JavaScript mm และการตอบสนองของ Google

  • สามารถตรวจพบอ็อบเจ็กต์ JavaScript ชื่อ mm ได้ใน mobile JavaScript console อย่าง eruda
  • อ็อบเจ็กต์ mm มีฟังก์ชันอยู่ 3 ตัว
    • closeView(): ปิดเบราว์เซอร์ และทำงานคล้ายกับตอนกดปุ่มย้อนกลับ
    • requestSecurityKeyHandshake(): ยังไม่ยืนยันหน้าที่ แต่จากชื่อดูเหมือนเป็นฟังก์ชันที่อ่อนไหว
    • updateSecurityKey(): ยังไม่ยืนยันหน้าที่ แต่จากชื่อดูเหมือนเป็นฟังก์ชันที่อ่อนไหว
  • เนื่องจากเบราว์เซอร์นี้เปิดผ่านเส้นทางฟีเจอร์ on-device encryption จึงยังเป็นเพียงข้อสันนิษฐานว่าฟังก์ชันที่ยังไม่ยืนยันทั้งสองอาจเกี่ยวข้องกับการตั้งค่าคีย์เข้ารหัสในเครื่อง
  • Google ตอบต่อการรายงานครั้งแรกว่าไม่ใช่ช่องโหว่ด้านความปลอดภัย และการข้ามการควบคุมโดยผู้ปกครองเป็น “Intended Behavior”
  • หลังบทความถูกเผยแพร่ ก็มีหลายสื่อทั้งฝั่งภาษาอังกฤษและรัสเซียหยิบไปนำเสนอ และ 3 วันหลังการเปิดเผย Google แจ้งว่าจะกลับมาทบทวนรายงานดังกล่าวอีกครั้ง
  • มีการพูดคุยที่เกี่ยวข้องใน Hacker News discussion

2 ความคิดเห็น

 
wedding 2023-06-28

พอเข้าไปที่การจัดการรหัสผ่านก็รู้สึกเหมือนมีอาการหน่วงช้ากว่าปกติอยู่หนึ่งจังหวะมาตลอด.. สงสัยคงไม่ใช่แค่คิดไปเองสินะ

 
GN⁺ 2023-06-27
ความคิดเห็นบน Hacker News
  • ผมลองสืบดูนิดหน่อย พบว่าเมื่อกด "Manage my account" มันไม่ได้อยู่ในแอป Settings ต่อ แต่พาไปยัง Activity ที่ฝังอยู่ใน Google Play Services
    สุดท้ายแล้วเบราว์เซอร์คือ com.google.android.gms/.auth.folsom.ui.GenericActivity และดูเหมือนไม่ได้ใช้ Chrome ซึ่งเป็น System WebView เริ่มต้นในเครื่องผม
    Android สามารถใช้ addJavascriptInterface เพื่อสร้างอินเทอร์เฟซระหว่างโค้ด Android กับโค้ด JavaScript ได้ และดูเหมือนว่า GMS จะใช้สิ่งนี้ค่อนข้างมาก จึงน่าจะเป็นพื้นผิวการโจมตีที่ควรกลับมาดูในภายหลัง
    อินเทอร์เฟซ mm ที่น่าสงสัยอยู่ใน MagicArchChallengeView และเชื่อมไปยังคลาส bwuz ที่ถูก obfuscate ไว้ ตัว bwuz เองแทบจะว่างเปล่า แต่ก็เชื่อมต่อไปยังคลาสที่ถูก obfuscate อื่น ๆ อีกหลายตัว
    ลองค้นหาสตริงดูพบว่าคลาส "qvc" และ "pdn" สองตัวเปิดเผยฟังก์ชันที่เกี่ยวข้อง โดย pdn ดูเหมือนเป็นแกนหลัก และใน qvc มี error log ที่มีประโยชน์ซึ่งเผยให้เห็นว่าแต่ละพารามิเตอร์คืออะไร
    setVaultSharedKeys คาดหวังอาร์เรย์ของอ็อบเจ็กต์ JSON ที่มี gaiaId และค่าคู่หนึ่งคือ epoch, key จากนั้นนำไปทำเป็นลิสต์แล้วส่งต่อให้คลาส abstract ที่ดูเหมือนเกี่ยวข้องลึก ๆ กับความปลอดภัยของบัญชี
    addEncryptionRecoveryMethod คาดหวัง gaiaId, รายการ security domain และ public key ของสมาชิก แล้วส่งต่อให้คลาส abstract เดียวกัน
    ผมหยุดแค่นี้เพราะต้องไปทำงาน แต่ดูเหมือนว่านอกจากอินเทอร์เฟซนี้แล้ว อินเทอร์เฟซอื่น ๆ ที่ GMS เปิดให้ WebView ใช้ก็น่าขุดคุ้ยต่อเช่นกัน
    https://developer.android.com/reference/android/webkit/WebVi...

    • สงสัยว่าทำไมถึงไม่ใช้ System WebView เริ่มต้น ถ้าอย่างนั้นหมายความว่าเป็น WebKit ไม่ใช่ Blink หรือเปล่า?
      ต่อให้เป็น Blink ก็มีโอกาสสูงว่าจะไม่ใหม่เท่าที่ Chrome มีให้ ดูจากลิงก์เอกสารแล้วน่าจะเป็น WebKit จริง ๆ
    • Alex Russell เคยพูดไว้ใน State of the Browser ปี 2021 ว่า WebView ของ Android ไม่ใช่ Chrome
      https://2021.stateofthebrowser.com/speakers/alex-russell/
    • gaiaId นี่คือ Google Accounts and ID Administration ID คนที่ตั้งชื่อนี้ให้ ID แบบ unique ทั่วทั้ง Google คงภูมิใจพอตัว และก็น่าภูมิใจจริง ๆ
  • ไม่แน่ใจว่าสิ่งนี้ต่างจาก WebView แบบฝังตัวอื่น ๆ ยังไง แทบทุกแอปก็ใส่ WebView แบบฝังตัว ไว้ตรงที่อย่าง "ดูนโยบายความเป็นส่วนตัว" ไม่ใช่เหรอ?
    หลายครั้งการแสดง HTML นั้นง่ายกว่าการโยนเนื้อหานโยบายความเป็นส่วนตัวทั้งหมดให้ผู้พัฒนาแอปมาก

    • ใช่เลย นั่นแหละคือ Android System WebView ซึ่งเป็นเบราว์เซอร์แบบฝังตัวที่ใช้เมื่อแอปไม่ได้เป็นเบราว์เซอร์เอง
    • เราใช้ WebView แบบนั้นเข้าเว็บไซต์ใดก็ได้หรือเปล่า? ผมไม่เคยทำสำเร็จเลย
      เท่าที่จำได้ การตั้งค่า WebView ให้ยอมรับหลายโดเมนหรือหลาย URL ก็ค่อนข้างยากอยู่แล้ว ผมไม่ใช่นักพัฒนา Android และครั้งล่าสุดที่แตะก็เมื่อหลายปีก่อน
    • ใน WebView นี้ดูเหมือนจะมีฟังก์ชัน JavaScript ที่มีสิทธิ์พิเศษสำหรับ การจัดการและกู้คืนคีย์ ของตัวจัดการรหัสผ่าน
    • ถ้าแอปใดก็ตามที่มี WebView แบบฝังตัวสามารถใช้เลี่ยงการควบคุมโดยผู้ปกครองได้ นี่ก็เป็นบั๊กที่ใหญ่กว่าของ Android
      เรื่องการจัดการคีย์ยังค่อนข้างเป็นการคาดเดา และผู้เขียนก็ยังไม่ได้ทดสอบว่าจริง ๆ แล้วมันทำอะไร จึงอยู่ในระดับ “ไม่รู้ว่าคืออะไร แต่มีเมธอดสองตัวที่ดูน่ากลัว”
    • สมัยก่อนใน iTunes ก็เคยทำอะไรแบบเดียวกันเล่น ๆ ได้ ผมไม่ค่อยแน่ใจว่านี่เป็นปัญหาใหญ่ขนาดนั้นไหม
  • คล้าย ๆ กับการเข้าอินเทอร์เน็ตผ่าน ไฟล์ช่วยเหลือ CHM ตอนที่เบราว์เซอร์ถูกบล็อกอยู่
    บ้าเอ๊ย เผลอเผยอายุซะแล้ว

    • เดี๋ยวนี้เราเปิดเผยอายุด้วย exploit กันแล้วเหรอ? แบบ “ที่เครื่องเทอร์มินัลในห้องสมุดมหาวิทยาลัย ผมเข้าเว็บผ่าน gopher แล้วเปิดเซสชัน telnet จากนั้นก็เช็กอีเมลของมหาวิทยาลัยต่างรัฐตลอดช่วงปิดเทอมฤดูร้อน” พอได้ไหม?
    • ผมก็ใช้วิธีนี้ติดตั้งเกมที่แอดมินลบไปกลับมาใหม่ด้วย
    • ที่โรงเรียนมัธยมของเรา เราใช้ dialog เปิดไฟล์ของ Notepad เพื่อเปิด Windows Explorer แล้วหลุดออกจาก shell bookshelf แปลก ๆ น่าจะเป็นผลิตภัณฑ์ของ IBM
  • เหมือนกับวิธีที่ผมใช้เลี่ยง แอปควบคุมโดยผู้ปกครอง บน Windows ตอนเด็ก ๆ เป๊ะ
    ผมมีเวลาใช้คอมพิวเตอร์แค่ 1 ชั่วโมง และพอหมดเวลา มันจะปิดทุกแอป ยกเว้นแอป Microsoft Office โดยให้เหตุผลว่าเป็นแอปเพื่อการทำงาน
    หลังจากกดนู่นกดนี่ไปเรื่อย ๆ ผมก็เปิดเบราว์เซอร์จากใน Outlook ได้ somehow แล้วเล่นเกม Flash บน Miniclip ได้

    • ทำให้นึกถึงวิธีที่ผมใช้เลี่ยง Mac ที่ถูกล็อกตอนมัธยม เปิดได้แค่บางแอป และเปิด System Preferences ก็ไม่ได้ แต่ใน Safari สามารถเปลี่ยนเว็บเบราว์เซอร์เริ่มต้นได้
      ผมเปลี่ยนเว็บเบราว์เซอร์เริ่มต้นเป็น Terminal จากนั้นเปิด Word สร้างลิงก์แล้วคลิก โดยปกติ Terminal ที่เปิดขึ้นมาจะถูกจำกัดจนการเรียกใช้แอปอื่นล้มเหลว แต่ instance ของ Terminal ที่เปิดด้วยวิธีนี้มีสิทธิ์มากกว่า จึงใช้ open /path/to/your/app รันเกมจากดิสก์ที่เสียบเข้าไปได้
      ตอนครูคุมห้องอ่านหนังสือเดินมาถามว่าเล่น Starcraft ได้หรือ ผมตอบว่า “อย่างที่ครูก็รู้ คอมพิวเตอร์พวกนี้ถูกล็อกไว้แน่นมาก ดังนั้นถ้าเราเล่นเกมนี้ได้ ก็แปลว่าโรงเรียนอนุญาตใช่ไหมครับ” ถึงทุกวันนี้ก็ยังไม่อยากเชื่อว่ามุกนั้นได้ผล
  • ถ้าเด็กหาวิธีแฮ็กนี้เจอและเข้าเว็บที่ถูกบล็อกได้ ผมว่าก็สมควรได้รับสิทธินั้นแล้ว

    • อาจไม่ได้ค้นพบเอง แต่อาจอ่านเจอจากอินเทอร์เน็ตหรือได้ยินจากเด็กคนอื่นก็ได้
  • เคยมีวิธีเลี่ยงคล้าย ๆ กันใน หน้าไลเซนส์ ของ about ด้วย
    พอกดตามลิงก์ไปยังไลเซนส์ ก็จะได้เบราว์เซอร์ขึ้นมา มีประโยชน์เวลาจะเปิดเบราว์เซอร์บน head unit ในรถหรือจักรยาน Peloton

    • ผมเพิ่งลองเข้าไปที่หน้า "Third-party licenses" บน Pixel 6 แล้วเห็นรายการลิงก์ยาวไม่รู้จบ
      ดูเหมือนรายการไฟล์ทั้งหมดใน filesystem
  • ประสบการณ์ของคนนี้ที่รายงานบั๊กให้ Google ทำให้นึกถึงประสบการณ์ของผมเอง
    ผม: มีบั๊กใน Google Sheets ที่ทำให้เนื้อหาที่ถูกลบถูกเปิดเผยต่อบุคคลที่สามได้
    Google: ไม่ใช่บั๊ก ทำงานตามที่ตั้งใจไว้ ปิดประเด็น
    ผม: จริงเหรอ? ผมได้รับความเสียหายจริงจากการใช้แอปพลิเคชันนี้นะ
    Google: จริง ๆ แล้วเป็นบั๊ก แต่เป็นประเด็นที่รู้กันมานานแล้ว จึงไม่เข้าเกณฑ์บั๊กบาวน์ตี ปิดประเด็น

    • ตอนผมรายงานช่องโหว่ให้ Google ก็แทบจะเหมือนกันเป๊ะ
      ผม: มีบั๊กใน Gmail ที่ทำให้อีเมลปลอมสามารถลบสถานะ DKIM failed แล้วดูเหมือนอีเมลปกติได้
      Google: "Won't fix (Intended Behavior)"
      ผม: หมายความว่า Google ตั้งใจให้อีเมลปลอมดูเหมือนปกติในอินเทอร์เฟซจริง ๆ เหรอ?
      Google: จริง ๆ แล้วเป็นประเด็นที่ทราบอยู่แล้ว
    • ผมก็เคยเจอแบบเดียวกัน ได้แต่คำตอบลอย ๆ จาก Google แล้วไม่กี่เดือนต่อมา หัวหน้า TAO ก็ประกาศ การแก้ไข ช่องโหว่ที่ผมเคยแจ้งไว้ตั้งแต่แรก
      แถมบทความแรก ๆ ยังพยายามโยงช่องโหว่นั้นกับการแฮ็กของจีน/รัสเซียด้วย โฆษณาชวนเชื่อแบบนั้นควรย้อนกลับไปหา Google เอง Google เป็นบริษัทอเมริกัน และเปิดแบ็กดอร์อ้าไว้ให้ใครก็ได้ ไม่ว่าจะต่างชาติหรือในประเทศ ใช้ในทางที่ผิดได้เต็มที่ ซึ่งในความเป็นจริงทั้งสองฝ่ายก็ใช้ไปแล้ว
      Google มีปัญหาจริง ๆ ไม่รู้ว่าหลังปี 2019 เกิดอะไรขึ้น แต่ไม่ใช่เรื่องดี
    • เรื่องนี้ผมก็มีจะเสริมเหมือนกัน
      ผม: มีบั๊กใน Google Play Services
      Google: ไม่ใช่บั๊ก ทำงานตามที่ตั้งใจไว้ ปิดประเด็น
      ผม: ผมเขียนบล็อกเรื่องบั๊กนี้ และสื่อรายงานกันใหญ่
      Google: ดูเหมือนเราจะผิดเอง! เป็นบั๊กจริง ๆ เราจะติดต่อกลับในอีกไม่กี่สัปดาห์
  • วันนี้เพิ่งรู้ว่ามีสิ่งที่เรียกว่า คอนโซล JavaScript บนมือถือ
    https://eruda.liriliri.io/

    • มีเวอร์ชันรีโมตที่คนเดียวกันทำไว้ด้วย: https://github.com/liriliri/chii
      เปิดเครื่องมือนักพัฒนาจากคอมพิวเตอร์อีกเครื่องได้ และข้อมูลทั้งหมดซิงก์ผ่าน WebSocket เคยลองใช้ครั้งหนึ่งตอนดีบักปัญหาบนอุปกรณ์ของลูกค้า
    • ถ้ามี bookmarklet ก็คงดี เครื่องมือนักพัฒนาของเบราว์เซอร์ปัจจุบันก็เริ่มต้นแบบนี้เหมือนกัน คือจาก Firebug
    • ดีมาก ๆ ใช้บน Brave ใน iOS ไม่ได้ แต่ใช้บน Safari ได้ แค่นั้นก็พอแล้ว
    • ไม่รู้ว่าเป็นแค่ผมหรือเปล่า แต่ใช้ไม่ได้เลย วางสไนเป็ต JavaScript ลงในแถบที่อยู่แล้วก็ไม่มีอะไรเกิดขึ้น ส่วนใน Nightly มันเอาสตริงนั้นไปค้น Google แทน
    • บางครั้งก็อุตส่าห์ใส่ถึง data:text/html, ด้วย แต่นี่มีฟีเจอร์ครบจนน่าทึ่ง
  • ผมเคยทำแบบเดียวกันในล็อบบี้ระหว่างที่พ่อแม่ทำธุรกรรมธนาคาร
    สมัยนั้นแท็ก best viewed in Netscape Navigator คือขุมทองเลย ลำดับก็แทบเหมือนกัน คือกดไปเรื่อย ๆ จนเจอแท็กแบบนั้น แล้วจากตรงนั้นก็ไปต่อที่เสิร์ชเอนจิน

    • ผมเคยใช้วิธีนี้ใน Tesla ที่ยืมมา เพื่อไปให้ถึงเบราว์เซอร์ที่เล่นวิดีโอได้เกือบเต็มจอผ่านแอป YouTube
      จากนั้นก็เข้าเว็บสตรีมมิงที่เต็มไปด้วยแอดแวร์น่าสงสัย พอเปลี่ยนไปวิดีโออื่น คอมพิวเตอร์ทั้งคันของ Tesla ก็ค้าง และต้องฮาร์ดรีบูตรถ
  • นึกถึง Windows เวอร์ชันเก่า ๆ เลย กด F1 แล้วสามารถทริกเกอร์ คำสั่งรัน หลายอย่างผ่าน Windows Help ได้

    • ผมก็นึกถึงอันนั้นเป็นอย่างแรกเหมือนกัน ให้ความรู้สึกเหมือนวิธีข้ามหน้าจอล็อกอินสมัย Windows 95/98 ประมาณ “F1 → เปิดไฟล์ช่วยเหลือ → Other... → คลิกขวาที่ explorer.exe แล้วเลือก Run”