createPackageContext

หมวดหมู่ OWASP: MASVS-CODE: คุณภาพโค้ด

ภาพรวม

public abstract Context createPackageContext (String packageName, int flags)

วิธีการ createPackageContext ใช้เมื่อนักพัฒนาแอปต้องการสร้างบริบทสําหรับแอปพลิเคชันอื่นในแอปพลิเคชันของตนเอง

ตัวอย่างเช่น หากนักพัฒนาแอปต้องการรับทรัพยากรจากแอปพลิเคชันของบุคคลที่สามหรือเรียกใช้เมธอดจากแอปพลิเคชันดังกล่าว ก็ต้องใช้ createPackageContext

อย่างไรก็ตาม หากแอปพลิเคชันเรียกใช้ createPackageContext ด้วย Flag CONTEXT_IGNORE_SECURITY และ CONTEXT_INCLUDE_CODE แล้วเรียกใช้ getClassLoader() อาจส่งผลให้แอปพลิเคชันมีช่องโหว่ในการเรียกใช้โค้ดโดยแอปพลิเคชันที่เป็นอันตราย กรณีนี้อาจเกิดขึ้นได้ เช่น เมื่อผู้โจมตีแอบอ้างเป็นชื่อแพ็กเกจที่ยังไม่ได้อ้างสิทธิ์ (การแอบอ้างชื่อแพ็กเกจ) ซึ่งนักพัฒนาแอปคาดหวังว่าจะมีอยู่ในอุปกรณ์ของผู้ใช้

สรุปเกณฑ์ที่ต้องปฏิบัติตามเพื่อให้แอปพลิเคชันมีช่องโหว่ต่อการโจมตีประเภทนี้

แอปที่มีช่องโหว่:

แอปที่เป็นอันตราย

  • อ้างสิทธิ์ชื่อแพ็กเกจที่แอปที่มีช่องโหว่ส่งให้กับ createPackageContext ได้
  • ส่งออก android:appComponentFactory

ผลกระทบ

เมื่อแอปพลิเคชันใช้ createPackageContext ในลักษณะที่ไม่ปลอดภัย อาจทําให้แอปพลิเคชันที่เป็นอันตรายสามารถเรียกใช้โค้ดโดยไม่มีกฎเกณฑ์ในบริบทของแอปพลิเคชันที่ยังมีช่องโหว่

การลดปัญหา

อย่าเรียก createPackageContext ด้วย CONTEXT_IGNORE_SECURITY และ CONTEXT_INCLUDE_CODE เว้นแต่จำเป็นจริงๆ

ในกรณีที่หลีกเลี่ยงไม่ได้ ให้ใช้กลไกเพื่อยืนยันตัวตนของแพ็กเกจที่คุณกำลังเรียกใช้ createPackageContext (เช่น โดยการยืนยันลายเซ็นของแพ็กเกจ)

แหล่งข้อมูล