รหัส Android 3.2+ (โดยไม่ได้ตั้งใจ?) ป้องกันการเข้าถึงการเขียนไปยังที่จัดเก็บข้อมูลภายนอก

ดูเหมือนว่า Google จะมีข้อบกพร่องในโค้ด AOSP ที่เปิดตัวใน Android 3.2 ซึ่งส่งผลต่อวิธีที่ระบบปฏิบัติการจัดการกับที่เก็บข้อมูล USB และสามารถป้องกันการเข้าถึงการเขียนการ์ด SD และแท่ง USB XDA Elite นักพัฒนาที่ได้รับการยอมรับ ผู้ดูแลอาวุโส และ นักเขียนข่าวเชนไฟร์ สรุปปัญหาไว้ในตัวเขา โพสต์บล็อก:

ในอดีต แอปจะขอ "เขียน_EXTERNAL_STORAGE" การอนุญาต ซึ่งจะให้สิทธิ์ในการเขียน ทั้งหมด ที่จัดเก็บข้อมูลภายนอก (ผู้ใช้/กลุ่ม "sdcard_rw"). เห็นได้ชัดว่ามีการเปลี่ยนแปลงเพื่อให้สิทธิ์การเข้าถึงการเขียนเท่านั้น หลัก จัดเก็บข้อมูลภายนอก. มีการอนุญาตครั้งที่สองที่เรียกว่า "WRITE_MEDIA_STORAGE" ซึ่งจะให้สิทธิ์การเข้าถึงที่จัดเก็บข้อมูลภายนอกอื่นๆ (ผู้ใช้/กลุ่ม "media_rw").

ปัญหาคือบุคคลที่สามจะไม่ได้รับการอนุญาตนี้จริงๆ โดยปกติแล้ว เฉพาะแอประบบและแอปที่ผู้ผลิตอุปกรณ์มอบให้เท่านั้นที่จะได้รับการอนุญาตนี้ มีข้อยกเว้น เห็นได้ชัดว่าแอปของบุคคลที่สามบางอุปกรณ์จะได้รับสิทธิ์นี้ แต่ตามแหล่งที่มาของ AOSP พวกเขาไม่ควรทำเช่นนั้นอย่างแน่นอน

ขณะที่ Chainfire ตรวจสอบปัญหา เขาก็พบโค้ดใน /system/vold/Volume.cpp ที่ระบุอย่างชัดเจนว่า:

 ถ้า (พื้นที่เก็บข้อมูลหลัก) {

// กรณีพิเศษ การ์ด SD หลัก.

// สำหรับสิ่งนี้ เราให้สิทธิ์การเขียนแก่กลุ่ม SDCARD_RW

gid = AID_SDCARD_RW;

} อื่น {

// สำหรับการจัดเก็บข้อมูลภายนอกสำรอง เราจะล็อกสิ่งต่างๆ ไว้

gid = AID_MEDIA_RW;

}

ในอุปกรณ์หลายๆ เครื่อง แฟลชภายในถือเป็น "การ์ด SD หลัก" ที่ จริง จากนั้นการ์ด SD จะกลายเป็นที่จัดเก็บข้อมูลภายนอกรอง และถูกล็อคไว้โดยป้องกันโดยสิ่งที่ไม่สามารถบรรลุได้ "WRITE_MEDIA_STORAGE" การอนุญาต.

Chainfire ส่งคำถามของเขาไปที่ เวลาทำการของนักพัฒนา Android ทีม และพวกเขาก็คุยกันเรื่องนี้กันในทีมของพวกเขา แฮงเอาท์สด วันที่ 11 เมษายน ขออภัย วิศวกรของ Google ที่อยู่ใน Hangout ไม่สามารถให้คำตอบที่แท้จริงได้ เนื่องจากนี่เป็นปัญหาที่ซับซ้อน และมีการถามคำถามเพียงหนึ่งชั่วโมงก่อนการแสดงจะถ่ายทอดสด อย่างไรก็ตาม พวกเขาสัญญาว่าจะแก้ไขปัญหานี้ให้หมด และจะกลับมาหา Chainfire (และเรา) อีกครั้งในภายหลัง

ตามข้อมูลของ Chainfire ปัญหาก็เกิดขึ้นจริงใน ICS บิวด์สำหรับ SGS2 เช่นกัน แม้ว่า Samsung "แก้ไขโดยใช้แฮ็กการอนุญาตที่น่าเกลียดมาก":

สิ่งที่คุณเห็นที่นี่คือซัมซุง ขี่หลัง สิทธิ์ WRITE_MEDIA_STORAGE ไปจนถึงสิทธิ์ WRITE_EXTERNAL_STORAGE ดังนั้นแอปจึงไม่ประสบปัญหาตามที่อธิบายไว้

Google ตั้งใจให้การ์ด SD ที่เชื่อมต่อและแท่ง USB เป็นแบบอ่านอย่างเดียวสำหรับแอปของบุคคลที่สามหรือไม่นั้นยังคงต้องรอดูต่อไป อย่างไรก็ตาม มันก่อให้เกิดความคิดที่น่ากังวล: จะเกิดอะไรขึ้นถ้ารหัสและบันทึกประกอบเป็นรหัสแรกของ Google ขั้นตอนของการใช้การป้องกันการเขียนบางประเภทสำหรับการจัดเก็บข้อมูลภายนอก และเป็นการจำกัดอุปกรณ์พกพาของเราเพิ่มเติม เสรีภาพ? เราหวังได้เพียงว่านี่เป็นข้อผิดพลาดอย่างแท้จริง เนื่องจากเสรีภาพเป็นหนึ่งในเหตุผลที่เราทุกคนหลีกเลี่ยง ด้านมืด.

[ขอบคุณ Chainfire อย่างยิ่งที่คอยช่วยเหลือและช่วยเหลือ!]