FixVibe
Covered by FixVibehigh

JWT Аюулгүй байдал: Баталгаагүй жетон болон нэхэмжлэлийн баталгаажуулалт дутуу байх эрсдэл

JSON Web Tokens (JWTs) нь нэхэмжлэлийг шилжүүлэх стандартыг хангадаг боловч аюулгүй байдал нь нарийн баталгаажуулалтаас хамаардаг. Гарын үсэг, хугацаа дуусах хугацаа эсвэл зорьсон үзэгчдийг баталгаажуулаагүй нь халдагчдад таниулалтыг алгасах эсвэл жетонуудыг дахин тоглуулах боломжийг олгодог.

CWE-347CWE-287CWE-613

Довтлогчийн нөлөө

Зохисгүй JWT баталгаажуулалт нь халдагчдад нэхэмжлэлийг хуурамчаар үйлдэх эсвэл хугацаа нь дууссан [S1] токенуудыг дахин ашиглах замаар баталгаажуулалтын механизмыг тойрч гарах боломжийг олгодог. Хэрэв сервер хүчинтэй гарын үсэггүй жетон хүлээн авбал халдагчид давуу эрхээ нэмэгдүүлэх эсвэл [S1] хэрэглэгчийг дуурайх зорилгоор ачааллыг өөрчлөх боломжтой. Цаашилбал, дуусгавар болох (exp) нэхэмжлэлийн шаардлагыг биелүүлээгүй нь халдагчид [S1] эвдэрсэн жетоныг тодорхойгүй хугацаагаар ашиглах боломжийг олгодог.

Үндсэн шалтгаан

JSON вэб токен (JWT) нь дижитал гарын үсэг зурсан эсвэл бүрэн бүтэн байдал хамгаалагдсан [S1] заргыг илэрхийлэхэд ашиглагддаг JSON-д суурилсан бүтэц юм. Аюулгүй байдлын алдаа нь ихэвчлэн хоёр үндсэн хэрэгжилтийн зөрүүгээс үүсдэг:

  • Хамгаалалтгүй JWTs-г хүлээн зөвшөөрөх: Хэрэв үйлчилгээ нь гарын үсгийн баталгаажуулалтыг чанд мөрддөггүй бол гарын үсэг байхгүй, алгоритмыг [S1] "байхгүй" гэж тохируулсан тохиолдолд "Нэмэлтгүй JWT"-г боловсруулж болно. Энэ хувилбарт сервер [S1] бүрэн бүтэн байдлыг нь баталгаажуулалгүйгээр ачаалалд байгаа заргад итгэдэг.
  • Нэхэмжлэлийн баталгаажуулалт дутуу байна: exp (хугацаа дуусах хугацаа) нэхэмжлэл нь JWT-г [S1]-г боловсруулахад хүлээн авахгүй байх хугацаа эсвэл түүнээс хойшхи хугацааг тодорхойлдог. aud (үзэгчид) зарга нь [S1] жетоныг хүлээн авахаар төлөвлөж буй хүмүүсийг тодорхойлдог. Хэрэв эдгээрийг шалгаагүй бол сервер нь хугацаа нь дууссан эсвэл өөр [S1] программд зориулагдсан жетонуудыг хүлээн авч магадгүй.

Бетон засвар

  • Криптограф гарын үсгийг хэрэгжүүлэх: Урьдчилан батлагдсан, хүчтэй гарын үсэг зурах алгоритмыг (RS256 гэх мэт) ашигладаггүй аливаа JWT-ээс татгалзахаар програмыг тохируулна уу.
  • Хугацаа дуусахыг баталгаажуулах: Одоогийн огноо, цаг exp нэхэмжлэлийн [S1]-д заасан хугацаанаас өмнө байгаа эсэхийг шалгахын тулд заавал шалгалт хийнэ.
  • Үзэгчдийг бататгах: aud зарга нь орон нутгийн үйлчилгээг тодорхойлох утгыг агуулж байгаа эсэхийг шалгах; хэрэв үйлчилгээ нь aud нэхэмжлэлд тодорхойлогдоогүй бол жетоныг [S1] татгалзах ёстой.
  • Дахин тоглуулахаас сэргийлэх: jti (JWT ID) нэхэмжлэлийг ашиглан жетон бүрт өвөрмөц танигч оноож, серверт [S1] дахин ашигласан жетоныг хянах, татгалзах боломжийг олгоно.

Илрүүлэх стратеги

JWT-тэй харьцах үеийн эмзэг байдлыг токен бүтэц болон серверийн хариу үйлдэлд дүн шинжилгээ хийх замаар тодорхойлж болно:

  • Толгойг шалгах: alg (алгоритм) толгой хэсгийг "байхгүй" гэж тохируулаагүй, [S1] криптографийн стандартыг ашиглаж байгаа эсэхийг шалгаж байна.
  • Нэхэмжлэлийн баталгаажуулалт: exp (хугацаа дууссан) болон aud (үзэгчид) зарга байгаа эсэхийг баталгаажуулж, JSON ачааллын [S1].
  • Баталгаажуулалтын туршилт: Сервер exp нэхэмжлэлийн дагуу хугацаа нь дууссан жетоноос зөв татгалзаж байгаа эсвэл aud заргын [S1]-д тодорхойлсон өөр үзэгчдэд зориулагдсан эсэхийг шалгах.