Skip to content

Commit c0e3288

Browse files
committed
feat(website): add the taipy
1 parent 5660b51 commit c0e3288

3 files changed

Lines changed: 5 additions & 12 deletions

File tree

website/source/content/docs/collection/showcases/taipy.md

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,7 @@ No validation is performed on the attribute path.
5959

6060
### Consequence 1: DoS
6161

62-
<video controls width="100%">
63-
<source src="https://drive.google.com/file/d/1BESvtyaJyEOp0BkeFdZFdwj83_E9wp18/preview" type="video/mp4">
64-
</video>
62+
[Video PoC](https://drive.google.com/file/d/1BESvtyaJyEOp0BkeFdZFdwj83_E9wp18/view)
6563

6664
**Steps:**
6765

@@ -80,6 +78,8 @@ No validation is performed on the attribute path.
8078

8179
### Consequence 2: OpenAI Token Leakage
8280

81+
[Video PoC](https://drive.google.com/file/d/1uXiHpO-SzE1jhHzMRCTZo9CSOZHORTmT/view)
82+
8383
**Steps:**
8484

8585
1. Set up the LLM ChatBot example from the [Taipy ChatBot Tutorial](https://docs.taipy.io/en/latest/tutorials/articles/chatbot/) at `http://localhost:5000`. The source code can be found [here](https://github.com/Avaiga/demo-chatbot).
@@ -97,7 +97,7 @@ No validation is performed on the attribute path.
9797

9898
### Consequence 3: XSS
9999

100-
<img src="https://github.com/user-attachments/assets/0aae38bb-8f08-4850-93c0-ffd60d9006ee" alt="Taipy XSS via class pollution" width="100%">
100+
<img src="/wiki/img/taipy-xss.gif" alt="Taipy XSS via class pollution" width="100%">
101101

102102
In [`taipy/gui/gui.py`](https://github.com/Avaiga/taipy/blob/439c7f52253fc09dd41c455a8a9f8da962d49dfa/taipy/gui/gui.py#L542-L546), when the application attempts to render user content, if the content provider is not found, it falls back to returning `type(content).__name__` as the HTML response:
103103

@@ -125,7 +125,7 @@ pollute(
125125

126126
### Consequence 4: RCE
127127

128-
<img src="https://github.com/user-attachments/assets/6419bc85-2492-44f2-857e-a7f60158ae31" alt="Taipy RCE via class pollution" width="100%">
128+
<img src="/wiki/img/taipy-rce.gif" alt="Taipy RCE via class pollution" width="100%">
129129

130130
The class pollution vulnerability allows attackers to set arbitrary attributes on objects that appear in the session state. We found that the `Gui.on_action` route can be leveraged to invoke the `Gui.table_on_edit` method, which allows new objects from the `__main__` module to be bound into the session state. In [`taipy/gui/gui.py`](https://github.com/Avaiga/taipy/blob/439c7f52253fc09dd41c455a8a9f8da962d49dfa/taipy/gui/gui.py#L1872), a `getattr` call on the state object automatically triggers the binding operation, while a subsequent `setattr` immediately resets the bound value to `None`:
131131

@@ -183,10 +183,3 @@ Full exploit scripts:
183183
- [RCE exploit](https://gist.github.com/jackfromeast/df377c20520c101ab61111b8f6da6583#file-rce-py)
184184
- [XSS exploit](https://gist.github.com/jackfromeast/df377c20520c101ab61111b8f6da6583#file-xss-py)
185185

186-
## References
187-
188-
1. CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes. <https://cwe.mitre.org/data/definitions/915.html>
189-
2. Class Pollution leading to RCE in pydash. <https://gist.github.com/CalumHutton/45d33e9ea55bf4953b3b31c84703dfca>
190-
3. Prototype Pollution in Python. <https://blog.abdulrah33m.com/prototype-pollution-in-python/>
191-
4. Google Mesop fix (similar vulnerability). <https://github.com/google/mesop/pull/1171>
192-
5. Liu et al. *The First Large-Scale Systematic Study of Python Class Pollution Vulnerability*. IEEE S&P 2025. <https://jackfromeast.github.io/assets/Pyrl.pdf>
8.22 MB
Loading
1.98 MB
Loading

0 commit comments

Comments
 (0)