Commit d23b611
committed
Remove Session serialize/deserialize methods to fix RCE vulnerability
The Session.deserialize method used Oj.load without safe mode, which allows
instantiation of arbitrary Ruby objects. If an attacker could control session
storage (e.g., compromise a Redis instance or database), they could inject
malicious serialized data to achieve remote code execution.
These methods were vestigial code from when the library handled session
storage (deprecated in v12.3.0). After that deprecation, apps became
responsible for their own session persistence, rendering serialize/deserialize
unnecessary for their original purpose. Investigation confirmed no external
usage - the shopify_app gem stores individual session attributes in database
columns and reconstructs sessions using Session.new().
The only internal usage was copy_attributes_from, which called serialize just
to enumerate attribute names via JSON.parse(other.serialize).keys before
copying instance variables. This has been refactored to directly copy each
attribute, eliminating the dependency on serialize.
Breaking change: Session#serialize and Session.deserialize removed.
Migration: Apps should use Session.new() to reconstruct sessions from stored
attributes (the pattern already used by shopify_app).
Complete removal eliminates the RCE vector entirely while maintaining all
functionality.1 parent 8522bbd commit d23b611
File tree
3 files changed
+73
-16
lines changed- lib/shopify_api/auth
3 files changed
+73
-16
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
117 | 117 | | |
118 | 118 | | |
119 | 119 | | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | 120 | | |
126 | 121 | | |
127 | 122 | | |
128 | 123 | | |
129 | | - | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
135 | 133 | | |
136 | 134 | | |
137 | 135 | | |
138 | | - | |
139 | | - | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | 136 | | |
144 | 137 | | |
145 | 138 | | |
| |||
0 commit comments