Commit 0cac4e9
committed
fix(skills): prevent path traversal in LocalSkillSource
LocalSkillSource resolved the caller-supplied skillName and resourcePath
directly against skillsBasePath with Path.resolve(), which does not
normalize or reject ".." segments. A skill name or resource path such as
"../../etc" / "passwd" therefore escaped skillsBasePath, allowing
arbitrary file read (e.g. /etc/passwd) and directory listing outside the
configured base.
Validate each caller-supplied component against its base directory in
findResourcePath, listResources, and findSkillMdPath: reject absolute
paths and any component whose normalized resolution leaves the base.
Adds tests covering skillName and resourceDirectory traversal.1 parent ec93f50 commit 0cac4e9
2 files changed
Lines changed: 60 additions & 0 deletions
File tree
- core/src
- main/java/com/google/adk/skills
- test/java/com/google/adk/skills
Lines changed: 33 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
48 | 54 | | |
49 | 55 | | |
50 | 56 | | |
| |||
96 | 102 | | |
97 | 103 | | |
98 | 104 | | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
99 | 111 | | |
100 | 112 | | |
101 | 113 | | |
| |||
106 | 118 | | |
107 | 119 | | |
108 | 120 | | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
109 | 126 | | |
110 | 127 | | |
111 | 128 | | |
| |||
122 | 139 | | |
123 | 140 | | |
124 | 141 | | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
125 | 158 | | |
126 | 159 | | |
127 | 160 | | |
| |||
Lines changed: 27 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
374 | 374 | | |
375 | 375 | | |
376 | 376 | | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
377 | 404 | | |
0 commit comments