FixVibe
Covered by FixVibehigh

CORS ການຕັ້ງຄ່າບໍ່ຖືກຕ້ອງ: ຄວາມສ່ຽງຂອງນະໂຍບາຍການອະນຸຍາດຫຼາຍເກີນໄປ

ການແບ່ງປັນຊັບພະຍາກອນຂ້າມແຫຼ່ງ (CORS) ແມ່ນກົນໄກຂອງຕົວທ່ອງເວັບທີ່ອອກແບບມາເພື່ອຜ່ອນຄາຍນະໂຍບາຍຕົ້ນກໍາເນີດດຽວກັນ (SOP). ໃນຂະນະທີ່ມີຄວາມຈໍາເປັນສໍາລັບແອັບຯເວັບທີ່ທັນສະໄຫມ, ການປະຕິບັດທີ່ບໍ່ເຫມາະສົມ - ເຊັ່ນ: echoing ຫົວຂໍ້ຕົ້ນກໍາເນີດຂອງຜູ້ຮ້ອງຂໍຫຼື whitelisting 'null' ຕົ້ນກໍາເນີດ - ສາມາດອະນຸຍາດໃຫ້ເວັບໄຊທ໌ທີ່ເປັນອັນຕະລາຍເພື່ອ exfiltrate ຂໍ້ມູນຜູ້ໃຊ້ສ່ວນຕົວ.

CWE-942

ຜົນກະທົບ

ຜູ້ໂຈມຕີສາມາດລັກເອົາຂໍ້ມູນທີ່ລະອຽດອ່ອນ, ຜ່ານການພິສູດຢືນຢັນຈາກຜູ້ໃຊ້ແອັບພລິເຄຊັນທີ່ມີຄວາມສ່ຽງ [S2]. ຖ້າຜູ້ໃຊ້ເຂົ້າເບິ່ງເວັບໄຊທ໌ທີ່ເປັນອັນຕະລາຍໃນຂະນະທີ່ເຂົ້າສູ່ລະບົບແອັບຯທີ່ມີຄວາມສ່ຽງ, ເວັບໄຊທ໌ທີ່ເປັນອັນຕະລາຍສາມາດເຮັດໃຫ້ຄໍາຮ້ອງຂໍຂ້າມຕົ້ນສະບັບໄປຫາ API ຂອງແອັບຯແລະອ່ານຄໍາຕອບ [S1][S2]. ນີ້ສາມາດນໍາໄປສູ່ການລັກຂໍ້ມູນສ່ວນຕົວ, ລວມທັງໂປຣໄຟລ໌ຜູ້ໃຊ້, CSRF tokens, ຫຼືຂໍ້ຄວາມສ່ວນຕົວ [S2].

ສາເຫດ

CORS ແມ່ນກົນໄກທີ່ອີງໃສ່ HTTP-header ທີ່ອະນຸຍາດໃຫ້ເຊີບເວີກໍານົດວ່າຕົ້ນກໍາເນີດ (ໂດເມນ, ໂຄງການ, ຫຼືພອດ) ໄດ້ຖືກອະນຸຍາດໃຫ້ໂຫລດຊັບພະຍາກອນ [S1]. ໂດຍປົກກະຕິແລ້ວ ຊ່ອງໂຫວ່ເກີດຂື້ນເມື່ອນະໂຍບາຍ CORS ຂອງເຊີບເວີມີຄວາມຍືດຫຍຸ່ນເກີນໄປ ຫຼືປະຕິບັດບໍ່ດີ [S2]:

  • ສ່ວນຫົວຕົ້ນກຳເນີດທີ່ສະທ້ອນຄືນ: ບາງເຊີບເວີອ່ານສ່ວນຫົວ Origin ຈາກການຮ້ອງຂໍຂອງລູກຄ້າ ແລະສະທ້ອນມັນກັບຄືນໃນສ່ວນຫົວຄຳຕອບ Access-Control-Allow-Origin (ACAO) [S2]. ນີ້ປະສິດທິຜົນອະນຸຍາດໃຫ້ເວັບໄຊທ໌ໃດຫນຶ່ງເຂົ້າເຖິງຊັບພະຍາກອນ [S2].
  • Wildcards ຕັ້ງຄ່າຜິດ: ໃນຂະນະທີ່ຕົວແທນ * ອະນຸຍາດໃຫ້ແຫຼ່ງທີ່ມາໃດໆໃນການເຂົ້າເຖິງຊັບພະຍາກອນ, ມັນບໍ່ສາມາດຖືກນໍາໃຊ້ສໍາລັບການຮ້ອງຂໍທີ່ຕ້ອງການຂໍ້ມູນປະຈໍາຕົວ (ເຊັ່ນ cookies ຫຼືຫົວຂໍ້ການອະນຸຍາດ) [S3]. ນັກພັດທະນາມັກຈະພະຍາຍາມຂ້າມສິ່ງນີ້ໂດຍການສ້າງສ່ວນຫົວ ACAO ແບບເຄື່ອນໄຫວໂດຍອີງໃສ່ຄໍາຮ້ອງຂໍ [S2].
  • ບັນຊີຂາວ 'null': ບາງແອັບພລິເຄຊັນໃນລາຍຊື່ null ທີ່ເປັນບັນຊີຂາວ, ເຊິ່ງສາມາດຖືກກະຕຸ້ນໂດຍການຮ້ອງຂໍການປ່ຽນເສັ້ນທາງ ຫຼືໄຟລ໌ທ້ອງຖິ່ນ, ອະນຸຍາດໃຫ້ເວັບໄຊທ໌ທີ່ເປັນອັນຕະລາຍສາມາດປອມຕົວເປັນຕົ້ນກໍາເນີດ null ເພື່ອເຂົ້າເຖິງ ZXCVFIXVIBETOKEN2ZFIXVIXZ.
  • ຄວາມຜິດພາດການແຍກວິເຄາະ: ຄວາມຜິດພາດໃນ regex ຫຼືການຈັບຄູ່ສະຕຣິງໃນເວລາທີ່ການກວດສອບສ່ວນຫົວ Origin ສາມາດອະນຸຍາດໃຫ້ຜູ້ໂຈມຕີໃຊ້ໂດເມນເຊັ່ນ trusted-domain.com.attacker.com [S2].

ມັນເປັນສິ່ງສໍາຄັນທີ່ຄວນສັງເກດວ່າ CORS ບໍ່ແມ່ນການປົກປ້ອງຕໍ່ Cross-Site Request Forgery (CSRF) [S2].

ແກ້ໄຂຄອນກີດ

  • ໃຊ້ບັນຊີຂາວແບບຄົງທີ່: ຫຼີກເວັ້ນການສ້າງສ່ວນຫົວ Access-Control-Allow-Origin ແບບເຄື່ອນໄຫວຈາກສ່ວນຫົວ Origin ຂອງການຮ້ອງຂໍ [S2]. ແທນທີ່ຈະ, ປຽບທຽບຕົ້ນກໍາເນີດຂອງຄໍາຮ້ອງຂໍກັບບັນຊີລາຍຊື່ hardcoded ຂອງໂດເມນທີ່ເຊື່ອຖືໄດ້ [S3].
  • ຫຼີກເວັ້ນຕົ້ນກໍາເນີດ 'null': ຢ່າລວມເອົາ null ໃນບັນຊີຂາວຂອງແຫຼ່ງກໍາເນີດທີ່ອະນຸຍາດ [S2] ຂອງທ່ານ.
  • ຈໍາກັດຂໍ້ມູນປະຈໍາຕົວ: ພຽງແຕ່ຕັ້ງ Access-Control-Allow-Credentials: true ຖ້າມີຄວາມຈໍາເປັນຢ່າງແທ້ຈິງສໍາລັບການໂຕ້ຕອບຂ້າມຕົ້ນສະບັບສະເພາະ [S3].
  • ໃຊ້ການກວດສອບທີ່ຖືກຕ້ອງ: ຖ້າທ່ານຕ້ອງສະຫນັບສະຫນູນຫຼາຍຕົ້ນກໍາເນີດ, ໃຫ້ແນ່ໃຈວ່າການກວດສອບຄວາມຖືກຕ້ອງສໍາລັບສ່ວນຫົວ Origin ແມ່ນແຂງແຮງແລະບໍ່ສາມາດຂ້າມຜ່ານໂດເມນຍ່ອຍຫຼືໂດເມນທີ່ມີລັກສະນະຄ້າຍຄືກັນ [S2].

ວິທີການ FixVibe ທົດສອບສໍາລັບມັນ

FixVibe ຕອນນີ້ລວມເອົາອັນນີ້ເປັນການກວດສອບທີ່ມີການເຄື່ອນໄຫວ. ຫຼັງຈາກການກວດສອບໂດເມນ, active.cors ສົ່ງຄໍາຮ້ອງຂໍ API ທີ່ມີຕົ້ນກໍາເນີດດຽວກັນກັບຕົ້ນກໍາເນີດຂອງການໂຈມຕີແບບສັງເຄາະແລະທົບທວນຄືນຫົວຂໍ້ການຕອບສະຫນອງ CORS. ລາຍງານມັນສະທ້ອນເຖິງຕົ້ນກຳເນີດທີ່ຕົນເອງມັກ, ຕົວແທນ CORS ທີ່ເປັນຕົວຕົນຂອງນາມບັດ, ແລະ CORS ທີ່ເປີດກ້ວາງຢູ່ໃນຈຸດສິ້ນສຸດ API ທີ່ບໍ່ແມ່ນສາທາລະນະໃນຂະນະທີ່ຫຼີກເວັ້ນສຽງລົບກວນຊັບສິນສາທາລະນະ.