{"id":23782,"date":"2025-03-28T13:38:54","date_gmt":"2025-03-28T12:38:54","guid":{"rendered":"https:\/\/herolab.usd.de\/?page_id=23782"},"modified":"2025-04-07T14:58:14","modified_gmt":"2025-04-07T12:58:14","slug":"usd-2025-0002","status":"publish","type":"page","link":"https:\/\/herolab.usd.de\/en\/security-advisories\/usd-2025-0002\/","title":{"rendered":"usd-2025-0002"},"content":{"rendered":"<p>[et_pb_section fb_built=\"1\" _builder_version=\"4.21.0\" _module_preset=\"default\" background_color=\"#2E353D\" custom_padding=\"||0px|||\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.25.2\" _module_preset=\"default\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.21.0\" _module_preset=\"default\" global_colors_info=\"{}\"][et_pb_text _builder_version=\"4.27.4\" _module_preset=\"default\" custom_padding=\"||13px|||\" hover_enabled=\"0\" global_colors_info=\"{}\" sticky_enabled=\"0\"]<\/p>\n<h1>usd-2025-0002 | Element Android 1.6.x - PIN request Bypass<\/h1>\n<h1><\/h1>\n<p><strong>Product<\/strong>: Element Android<br \/><strong>Affected Version<\/strong>: 1.6.x<br \/><strong>Vulnerability Type<\/strong>: Broken Access (CWE-284)<br \/><strong>Security Risk<\/strong>: Medium<br \/><strong>Vendor<\/strong>: Element<br \/><strong>Vendor URL<\/strong>: <a href=\"https:\/\/github.com\/element-hq\/element-android\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/element-hq\/element-android<\/a><br \/><strong>Vendor acknowledged vulnerability<\/strong>: Yes<br \/><strong>Vendor Status<\/strong>: Fixed<br \/><strong>CVE number<\/strong>: CVE-2025-27606<br \/><strong>CVE Link<\/strong>: <a href=\"https:\/\/www.cve.org\/CVERecord?id=CVE-2025-27606\" target=\"_blank\" rel=\"noopener\">https:\/\/www.cve.org\/CVERecord?id=CVE-2025-27606<\/a><br \/><strong>Advisory ID<\/strong>: usd-2025-0002<\/p>\n<h3>Description<\/h3>\n<p>A brute force attack on the PIN code is possible if the PIN code is set and the internet connection is deactivated.<br \/>The session is not invalidated and the PIN can then be used to gain full access to the application. As the PIN code is a four-digit number, this attack can be carried out in a short time.<\/p>\n<p>The following code snippets are from the open source client <em>Element Android<\/em>. The underlying vulnerability is located in <a href=\"https:\/\/github.com\/element-hq\/element-android\/blob\/develop\/vector\/src\/main\/java\/im\/vector\/app\/features\/MainActivity.kt\" target=\"_blank\" rel=\"noopener\"><strong>MainActivity.kt<\/strong><\/a>.<\/p>\n<h3>Proof of Concept<\/h3>\n<p>If the PIN code is entered incorrectly, the method <strong>onWrongPin()<\/strong> is called, which is located in the file <strong>vector\/src\/main\/java\/im\/vector\/app\/features\/pin\/PinFragment.kt<\/strong>:<\/p>\n<div class=\"codehilite\" style=\"background: #263238;color: #eff\">\n<pre style=\"line-height: 125%\"><span style=\"background: #263238\"><\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">private<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">fun<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"nf\" style=\"background: #263238;color: #82aaff\">onWrongPin<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">val<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"nv\" style=\"background: #263238;color: #89ddff\">remainingAttempts<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">pinCodeStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">onWrongPin<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">when<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">remainingAttempts<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">&gt;<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"m\" style=\"background: #263238;color: #f78c6c\">1<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">requireActivity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">().<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">toast<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">resources<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">getQuantityString<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">CommonPlurals<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">wrong_pin_message_remaining_attempts<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">remainingAttempts<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">remainingAttempts<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">))<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">remainingAttempts<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">==<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"m\" style=\"background: #263238;color: #f78c6c\">1<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">requireActivity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">().<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">toast<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">CommonStrings<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">wrong_pin_message_last_remaining_attempt<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">else<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">requireActivity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">().<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">toast<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">CommonStrings<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">too_many_pin_failures<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"c1\" style=\"background: #263238;color: #546e7a;font-style: italic\">\/\/ Logout<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">launchResetPinFlow<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<\/span><span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<\/pre>\n<\/div>\n<p>This checks the number of remaining input attempts and calls the <strong>launchResetPinFlow()<\/strong> function if an incorrect PIN has been entered too often:<\/p>\n<div class=\"codehilite\" style=\"background: #263238;color: #eff\">\n<pre style=\"line-height: 125%\"><span style=\"background: #263238\"><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">  <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">private<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">fun<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"nf\" style=\"background: #263238;color: #82aaff\">launchResetPinFlow<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">MainActivity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">restartApp<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">requireActivity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(),<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">MainActivityArgs<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">clearCredentials<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">true<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">))<\/span>\n<\/span><span class=\"w\" style=\"background: #263238;color: #eff\">  <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<\/pre>\n<\/div>\n<p>The <strong>restartApp()<\/strong> method starts a new activity with the argument <strong>clearCredentials = true<\/strong>:<\/p>\n<div class=\"codehilite\" style=\"background: #263238;color: #eff\">\n<pre style=\"line-height: 125%\"><span style=\"background: #263238\"><\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">fun<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"nf\" style=\"background: #263238;color: #82aaff\">restartApp<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">activity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">:<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">Activity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">:<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">MainActivityArgs<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">val<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"nv\" style=\"background: #263238;color: #89ddff\">intent<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">Intent<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">activity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">MainActivity<\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">::<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">class<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">java<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">intent<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">addFlags<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">Intent<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">FLAG_ACTIVITY_NEW_TASK<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">or<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">Intent<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">FLAG_ACTIVITY_CLEAR_TASK<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">intent<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">putExtra<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">EXTRA_ARGS<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">activity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">startActivity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">intent<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<\/pre>\n<\/div>\n<p>This and all subsequent methods originate from the file <strong>vector\/src\/main\/java\/im\/vector\/app\/features\/MainActivity.kt<\/strong>.<\/p>\n<p>During the restart, the function <strong>handleAppStarted()<\/strong> is called, which defines how the <strong>clearCredentials<\/strong> argument is handled. By passing <strong>clearCredentials = true<\/strong>, the two methods <strong>clearNotifications()<\/strong> and <strong>doCleanup()<\/strong> are called:<\/p>\n<div class=\"codehilite\" style=\"background: #263238;color: #eff\">\n<pre style=\"line-height: 125%\"><span style=\"background: #263238\"><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">[<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">...<\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">]<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">parseArgs<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">if<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">clearCredentials<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">||<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">isUserLoggedOut<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">||<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">clearCache<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">clearNotifications<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"c1\" style=\"background: #263238;color: #546e7a;font-style: italic\">\/\/ Handle some wanted cleanup<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">if<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">clearCache<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">||<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">clearCredentials<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<\/span><span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">doCleanUp<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">else<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">[<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">...<\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">]<\/span>\n<\/pre>\n<\/div>\n<p>The latter passes the argument <strong>ignoreServerError = false<\/strong> to the method <strong>signout()<\/strong>:<\/p>\n<div class=\"codehilite\" style=\"background: #263238;color: #eff\">\n<pre style=\"line-height: 125%\"><span style=\"background: #263238\"><\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">private<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">fun<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"nf\" style=\"background: #263238;color: #82aaff\">doCleanUp<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">val<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"nv\" style=\"background: #263238;color: #89ddff\">session<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">activeSessionHolder<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">getSafeActiveSession<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">if<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">session<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">==<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">null<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">startNextActivityAndFinish<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">return<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">val<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"nv\" style=\"background: #263238;color: #89ddff\">onboardingStore<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">vectorStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">this<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">when<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">isAccountDeactivated<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">lifecycleScope<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">launch<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">                <\/span><span class=\"c1\" style=\"background: #263238;color: #546e7a;font-style: italic\">\/\/ Just do the local cleanup<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">                <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">Timber<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">w<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"s\" style=\"background: #263238;color: #c3e88d\">\"Account deactivated, start app\"<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">                <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">activeSessionHolder<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">clearActiveSession<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">                <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">doLocalCleanup<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">clearPreferences<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">true<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">onboardingStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">                <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">startNextActivityAndFinish<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">clearCredentials<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<\/span><span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">signout<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">onboardingStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">ignoreServerError<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">false<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">clearCache<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">lifecycleScope<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">launch<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">                <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">clearCache<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">                <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">doLocalCleanup<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">clearPreferences<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">false<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">onboardingStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">                <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">startSyncing<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">applicationContext<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">                <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">startNextActivityAndFinish<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<\/pre>\n<\/div>\n<p>This method handles the actual signout process:<\/p>\n<div class=\"codehilite\" style=\"background: #263238;color: #eff\">\n<pre style=\"line-height: 125%\"><span style=\"background: #263238\"><\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">private<\/span> <span class=\"n\" style=\"background: #263238;color: #eff\">fun<\/span> <span class=\"n\" style=\"background: #263238;color: #eff\">signout<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span>\n      <span class=\"n\" style=\"background: #263238;color: #eff\">session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">:<\/span> <span class=\"n\" style=\"background: #263238;color: #eff\">Session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span>\n      <span class=\"n\" style=\"background: #263238;color: #eff\">onboardingStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">:<\/span> <span class=\"n\" style=\"background: #263238;color: #eff\">VectorSessionStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span>\n      <span class=\"n\" style=\"background: #263238;color: #eff\">ignoreServerError<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">:<\/span> <span class=\"n\" style=\"background: #263238;color: #eff\">Boolean<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span>\n<span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span> <span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n  <span class=\"n\" style=\"background: #263238;color: #eff\">lifecycleScope<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">launch<\/span> <span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n      <span class=\"k\" style=\"background: #263238;color: #bb80b3\">try<\/span> <span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\">          <span class=\"n\" style=\"background: #263238;color: #eff\">session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">signOutService<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">().<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">signOut<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">!<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">isUserLoggedOut<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span> <span class=\"n\" style=\"background: #263238;color: #eff\">ignoreServerError<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<\/span>      <span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span> <span class=\"k\" style=\"background: #263238;color: #bb80b3\">catch<\/span> <span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">failure<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">:<\/span> <span class=\"n\" style=\"background: #263238;color: #eff\">Throwable<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span> <span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n          <span class=\"n\" style=\"background: #263238;color: #eff\">Timber<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">e<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">failure<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span> <span class=\"s\" style=\"background: #263238;color: #c3e88d\">\"SIGN_OUT: error, propose to sign out anyway\"<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\">          <span class=\"n\" style=\"background: #263238;color: #eff\">displaySignOutFailedDialog<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span> <span class=\"n\" style=\"background: #263238;color: #eff\">onboardingStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<\/span>          <span class=\"k\" style=\"background: #263238;color: #bb80b3\">return<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">@<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">launch<\/span>\n      <span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n      <span class=\"n\" style=\"background: #263238;color: #eff\">Timber<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">w<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"s\" style=\"background: #263238;color: #c3e88d\">\"SIGN_OUT: success, start app\"<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n      <span class=\"n\" style=\"background: #263238;color: #eff\">activeSessionHolder<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">clearActiveSession<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n      <span class=\"n\" style=\"background: #263238;color: #eff\">doLocalCleanup<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">clearPreferences<\/span> <span class=\"p\" style=\"background: #263238;color: #89ddff\">=<\/span> <span class=\"kc\" style=\"background: #263238;color: #89ddff\">true<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span> <span class=\"n\" style=\"background: #263238;color: #eff\">onboardingStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n      <span class=\"n\" style=\"background: #263238;color: #eff\">startNextActivityAndFinish<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n  <span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<\/pre>\n<\/div>\n<p>If an error occurs, the <strong>displaySignOutFailedDialog<\/strong> is displayed, which offers the three buttons <strong>sign_out_anyway<\/strong> (<em>Sign out anyway<\/em>), <strong>global_retry<\/strong> (<em>Retry<\/em>) and <strong>action_cancel<\/strong> (<em>Cancel<\/em>):<\/p>\n<div class=\"codehilite\" style=\"background: #263238;color: #eff\">\n<pre style=\"line-height: 125%\"><span style=\"background: #263238\"><\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">private<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">fun<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"nf\" style=\"background: #263238;color: #82aaff\">displaySignOutFailedDialog<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">:<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">Session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">onboardingStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">:<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">VectorSessionStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span>\n<span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">  <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">if<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">lifecycle<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">currentState<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">isAtLeast<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">Lifecycle<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">State<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">RESUMED<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">))<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">MaterialAlertDialogBuilder<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">this<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">setTitle<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">CommonStrings<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">dialog_title_error<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">setMessage<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">CommonStrings<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">sign_out_failed_dialog_message<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">setPositiveButton<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">CommonStrings<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">sign_out_anyway<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">_<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">_<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">                  <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">signout<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">onboardingStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">ignoreServerError<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">true<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<\/span><span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">setNeutralButton<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">CommonStrings<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">global_retry<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">_<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">_<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">                  <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">signout<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">session<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">onboardingStore<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">ignoreServerError<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">false<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<\/span><span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">setNegativeButton<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">CommonStrings<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">action_cancel<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">_<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">_<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">startNextActivityAndFinish<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">ignoreClearCredentials<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">true<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<\/span><span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">setCancelable<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">false<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">show<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">  <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<\/pre>\n<\/div>\n<p>If <em>Cancel<\/em> is selected, <strong>startNextActivityAndFinish<\/strong> is called with the parameter <strong>ignoreClearCredentials = true<\/strong>. As the active session has not yet been deleted, it is retrieved and the <strong>HomeActivity<\/strong> is then opened:<\/p>\n<div class=\"codehilite\" style=\"background: #263238;color: #eff\">\n<pre style=\"line-height: 125%\"><span style=\"background: #263238\"><\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">private<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">fun<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"nf\" style=\"background: #263238;color: #82aaff\">startNextActivityAndFinish<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">ignoreClearCredentials<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">:<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kt\" style=\"background: #263238;color: #bb80b3\">Boolean<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">false<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">  <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">val<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"nv\" style=\"background: #263238;color: #89ddff\">intent<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">when<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">clearCredentials<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">&amp;&amp;<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">!<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">ignoreClearCredentials<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">&amp;&amp;<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">            <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">!<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">isUserLoggedOut<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">||<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">isAccountDeactivated<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"c1\" style=\"background: #263238;color: #546e7a;font-style: italic\">\/\/ User has explicitly asked to log out or deactivated his account<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">navigator<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">openLogin<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">this<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">null<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">null<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">isSoftLogout<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"c1\" style=\"background: #263238;color: #546e7a;font-style: italic\">\/\/ The homeserver has invalidated the token, with a soft logout<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">navigator<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">softLogout<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">this<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">null<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">args<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">isUserLoggedOut<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"c1\" style=\"background: #263238;color: #546e7a;font-style: italic\">\/\/ the homeserver has invalidated the token (password changed, device deleted, other security reasons)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">SignedOutActivity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">newIntent<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">this<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">activeSessionHolder<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">hasActiveSession<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">()<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span>\n<\/span><span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"c1\" style=\"background: #263238;color: #546e7a;font-style: italic\">\/\/ We have a session.<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"c1\" style=\"background: #263238;color: #546e7a;font-style: italic\">\/\/ Check it can be opened<\/span>\n<span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">if<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">activeSessionHolder<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">getActiveSession<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">().<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">isOpenable<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<\/span><span class=\"hll\" style=\"background: #263238;background-color: #2c3b41\"><span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">HomeActivity<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">newIntent<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">this<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">firstStartMainActivity<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">false<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">existingSession<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">true<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<\/span><span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">else<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"c1\" style=\"background: #263238;color: #546e7a;font-style: italic\">\/\/ The token is still invalid<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">navigator<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">softLogout<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">this<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">              <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">null<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">else<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">-&gt;<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"c1\" style=\"background: #263238;color: #546e7a;font-style: italic\">\/\/ First start, or no active session<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">navigator<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">openLogin<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">this<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">,<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">null<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">          <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">null<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">      <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">  <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<span class=\"w\" style=\"background: #263238;color: #eff\">  <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">startIntentAndFinish<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">intent<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span>\n<span class=\"p\" style=\"background: #263238;color: #89ddff\">}<\/span>\n<\/pre>\n<\/div>\n<p>The app then asks for the PIN code again and allows the next attempts to be entered. This allows the PIN code to be brute-forced when the internet connection is disconnected.<\/p>\n<p>The session data is not deleted when the signout function returns. This happens because of the error in the catch block at line 319. As a result, the PIN can be used after a brute force attack to unlock the app when the internet connection is reactivated. This allows the user to continue using the still-active session and gain full access to all content.<br \/>The session data would be deleted in the <strong>doLocalCleanup<\/strong> function, which is called in line 323 of the <strong>signout<\/strong> method. However, this code point is not reached if the logout fails.<\/p>\n<h3>Fix<\/h3>\n<p>It is recommended to set the parameter <strong>ignoreServerError<\/strong>, which is used to call the <strong>signout<\/strong> function in line 295, to <strong>true<\/strong>. This may impair the user-friendliness, but represents a short-term and easy-to-implement solution for the described vulnerability.<\/p>\n<h3>References<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/element-hq\/element-android\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/element-hq\/element-android<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/element-hq\/element-android\/blob\/develop\/vector\/src\/main\/java\/im\/vector\/app\/features\/pin\/PinFragment.kt\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/element-hq\/element-android\/blob\/develop\/vector\/src\/main\/java\/im\/vector\/app\/features\/pin\/PinFragment.kt<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/element-hq\/element-android\/blob\/develop\/vector\/src\/main\/java\/im\/vector\/app\/features\/MainActivity.kt\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/element-hq\/element-android\/blob\/develop\/vector\/src\/main\/java\/im\/vector\/app\/features\/MainActivity.kt<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/element-hq\/element-android\/security\/advisories\/GHSA-632v-9pm3-m8ch\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/element-hq\/element-android\/security\/advisories\/GHSA-632v-9pm3-m8ch<\/a><\/li>\n<\/ul>\n<h3>Timeline<\/h3>\n<ul>\n<li><strong>2025-01-23<\/strong>: First contact request via mail.<\/li>\n<li><strong>2025-01-27<\/strong>: Vendor acknowledged the vulnerability and were able to reproduce it.<\/li>\n<li><strong>2025-03-13<\/strong>: Vulnerability is patched in version 1.6.34.<\/li>\n<li><strong>2025-03-28<\/strong>: This advisory is published.<\/li>\n<\/ul>\n<h3>Credits<\/h3>\n<p>This security vulnerability was identified by Dominique Dittert, Tobias Hamann and Fabian Brenner of usd AG.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>usd-2025-0002 | Element Android 1.6.x - PIN request Bypass Product: Element AndroidAffected Version: 1.6.xVulnerability Type: Broken Access (CWE-284)Security Risk: MediumVendor: ElementVendor URL: https:\/\/github.com\/element-hq\/element-androidVendor acknowledged vulnerability: YesVendor Status: FixedCVE number: CVE-2025-27606CVE Link: https:\/\/www.cve.org\/CVERecord?id=CVE-2025-27606Advisory ID: usd-2025-0002 Description A brute force attack on the PIN code is possible if the PIN code is set and the internet connection [&hellip;]<\/p>\n","protected":false},"author":118,"featured_media":0,"parent":16124,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"class_list":["post-23782","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/pages\/23782","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/users\/118"}],"replies":[{"embeddable":true,"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/comments?post=23782"}],"version-history":[{"count":5,"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/pages\/23782\/revisions"}],"predecessor-version":[{"id":23805,"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/pages\/23782\/revisions\/23805"}],"up":[{"embeddable":true,"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/pages\/16124"}],"wp:attachment":[{"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/media?parent=23782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}