<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Security on davidzou.com</title>
        <link>https://davidzou.com/tags/security/</link>
        <description>Recent content in Security on davidzou.com</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-au</language>
        <lastBuildDate>Mon, 28 Mar 2016 00:00:00 +0000</lastBuildDate><atom:link href="https://davidzou.com/tags/security/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>BIOS Password Bypass</title>
            <link>https://davidzou.com/articles/bios-password-bypass/</link>
            <pubDate>Mon, 28 Mar 2016 00:00:00 +0000</pubDate>
            <guid>https://davidzou.com/articles/bios-password-bypass/</guid>
            <description>&lt;p&gt;BIOS Administrator/Supervisor Password Bypass/Removal&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &#xA;    &lt;blockquote&gt;&#xA;        &#xA;    &lt;blockquote&gt;&#xA;        &#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;These instructions are provided without warranty. Use at own risk.&lt;br&gt;&#xA;Please be careful when playing with hardware. You can easily break or damage components.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;This guide will run through bypassing and changing/removing a BIOS password. This guide can also bypass the supervisor password prompt which occurs when the incorrect password has been entered too may times, resulting in the message &amp;ldquo;System Security - Security password retry count exceeded&amp;rdquo;. This guide will use Lenovo BIOS and UEFI as examples.&lt;/p&gt;&#xA;&lt;p&gt;The rough steps you will need to take are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Disassemble your device&lt;/li&gt;&#xA;&lt;li&gt;Locate the EEPROM chip on the mainboard&lt;/li&gt;&#xA;&lt;li&gt;Find a datasheet for your EEPROM chip and/or locate the &lt;code&gt;SLC&lt;/code&gt; and &lt;code&gt;SDA&lt;/code&gt; pins&lt;/li&gt;&#xA;&lt;li&gt;Short the &lt;code&gt;SCL&lt;/code&gt; and &lt;code&gt;SDA&lt;/code&gt; pins while the BIOS checks the password&lt;/li&gt;&#xA;&lt;li&gt;Change/remove the password&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;step-1-disassemble&#34;&gt;Step 1: Disassemble&#xA;&lt;/h2&gt;&lt;p&gt;Start by removing the back cover of your laptop. Chances are that you won&amp;rsquo;t find the EEPROM behind the exposed parts behind the back cover. You will probably need to remove the entire back/base of the laptop or even get to the other side of the mainboard. Most Lenovo laptops have the EEPROM on the other side of the mainboard (the keyboard side).&lt;/p&gt;&#xA;&lt;h2 id=&#34;step-2-locate-the-eeprom&#34;&gt;Step 2: Locate the EEPROM&#xA;&lt;/h2&gt;&lt;p&gt;You are looking for an &lt;a class=&#34;link&#34; href=&#34;https://www.google.com/search?tbm=isch&amp;amp;q=TSSOP%20eeprom#imgrc=sCXD3wI9ldnlHM%3A&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;8-pin Serial EEPROM&lt;/a&gt; chip, though it can come in a 5 pin SOT-23 package. To confirm what chip you have, simply read the characters off the chip and Google it. One with results for a serial EEPROM would indicate the correct chip. Due to the small packages of these chips, the characters marked on the chip may not be the model number of the chip and may be an abbreviation. Also, if you find results for serial flash chips with a capacity of a few hundred K (Kilobits) or a few M (Megabits), chances are that you have found the chip the &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/Embedded_controller&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Embedded Controller&lt;/a&gt; or BIOS/UEFI is stored in. Keep looking!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://www.sii-ic.com/en/semicon/products/memory/general-serial-eeprom/intro-2/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;img alt=&#34;Surface Mount EEPROM Packages&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;351px&#34; data-flex-grow=&#34;146&#34; data-title-escaped=&#34;Image thanks to SII Semiconductor Corporation&#34; height=&#34;266&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/articles/bios-password-bypass/eeprom_packages.jpg&#34; title=&#34;Image thanks to SII Semiconductor Corporation&#34; width=&#34;390&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;step-3-find-a-datasheet-andor-locate-the-slc-and-sda-pins&#34;&gt;Step 3: Find a datasheet and/or locate the SLC and SDA pins&#xA;&lt;/h2&gt;&lt;p&gt;On most 8-pin packages, the &lt;code&gt;SDA&lt;/code&gt; and &lt;code&gt;SCL&lt;/code&gt; pins are on pins 5 and 6 respectively. Pin 1 can be identified by the dot/circle etched next to it (some packages may have a semicircle etched on the edge between pins 1 and 8) and the pins are numbered anticlockwise.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;8-pin Serial EEPROM Pins&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;414px&#34; data-flex-grow=&#34;172&#34; height=&#34;306&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/articles/bios-password-bypass/8pinEEPROM.png&#34; width=&#34;528&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;step-4-ensure-the-bios-reads-null-from-the-eeprom-when-checking-the-password&#34;&gt;Step 4: Ensure the BIOS reads &lt;code&gt;NULL&lt;/code&gt; from the EEPROM when checking the password&#xA;&lt;/h2&gt;&lt;p&gt;The BIOS communicates with the serial EEPROM through a bus called &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/I%C2%B2C&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;I&lt;sup&gt;2&lt;/sup&gt;C&lt;/a&gt;. The serial &lt;code&gt;clock&lt;/code&gt; and &lt;code&gt;data&lt;/code&gt; pins are open-drain and are grounded in a specific order for communication to occur. We want to ensure that the only data that gets read out is &lt;code&gt;NULL&lt;/code&gt;. This should fool the BIOS into thinking there is no password set.&lt;/p&gt;&#xA;&lt;p&gt;We can conveniently tie both the &lt;code&gt;SCL&lt;/code&gt; and &lt;code&gt;SDA&lt;/code&gt; pins together in order to achieve what we want. Note that tying &lt;code&gt;SCL&lt;/code&gt; or &lt;code&gt;SDA&lt;/code&gt; to Ground or Vcc will cause the BIOS to hang, as transitions between low and high are part of the I&lt;sup&gt;2&lt;/sup&gt;C protocol.&lt;/p&gt;&#xA;&lt;p&gt;We can simply short the &lt;code&gt;SCL&lt;/code&gt; and &lt;code&gt;SDA&lt;/code&gt; pins together with a conductor such as a flat head screwdriver or a paperclip.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;L08 Serial I2C EEPROM&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;346px&#34; data-flex-grow=&#34;144&#34; height=&#34;1329&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/articles/bios-password-bypass/Lenovo_EEPROM_L08.jpg&#34; srcset=&#34;https://davidzou.com/articles/bios-password-bypass/Lenovo_EEPROM_L08_hu_fa6686d9a786b506.jpg 800w, https://davidzou.com/articles/bios-password-bypass/Lenovo_EEPROM_L08_hu_289a49d4ad0f2c2c.jpg 1600w, https://davidzou.com/articles/bios-password-bypass/Lenovo_EEPROM_L08.jpg 1920w&#34; width=&#34;1920&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The procedure seems to be slightly different for BIOS and UEFI systems. BIOS based systems seem to read the password from the EEPROM after the user pushes the &lt;kbd&gt;ENTER&lt;/kbd&gt; key after entering the password, while UEFI based systems seem to read all the configuration required from EEPROM into memory right after the power is turned on. BIOS based systems will be the easiest to bypass, while UEFI based systems may require a few goes before you succeed.&lt;/p&gt;&#xA;&lt;p&gt;You can determine whether your system is BIOS or UEFI based by checking specifications or the user manual to see if it supports UEFI boot. You can also enter the BIOS/UEFI setup in read-only mode by using an empty password. If the &amp;ldquo;Boot&amp;rdquo; menu mentions &amp;ldquo;UEFI&amp;rdquo;, then you have a UEFI based system, otherwise you have Legacy BIOS.&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &#xA;    &lt;blockquote&gt;&#xA;        &#xA;    &lt;blockquote&gt;&#xA;        &#xA;    &lt;blockquote&gt;&#xA;        &#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;Chances are you have removed the keyboard to get to the EEPROM chip. As some of the steps require the use of a keyboard, you may wish to plug a USB keyboard in to use. Otherwise you&amp;rsquo;ll need to awkwardly poke and prod underneath the keyboard.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;bios-based-procedure&#34;&gt;BIOS based procedure&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;Turn on the device&lt;/li&gt;&#xA;&lt;li&gt;Press &lt;kbd&gt;F1&lt;/kbd&gt; repeatedly to enter BIOS setup and get the password prompt&lt;/li&gt;&#xA;&lt;li&gt;Short &lt;code&gt;SDA&lt;/code&gt; and &lt;code&gt;SCL&lt;/code&gt; pins and keep it shorted.&lt;/li&gt;&#xA;&lt;li&gt;Press &lt;kbd&gt;ENTER&lt;/kbd&gt; on the keyboard and then un-short the two pins. You should get an &lt;em&gt;OK&lt;/em&gt; prompt. If you get a notice &lt;em&gt;BIOS setup is locked. Only the System Supervisor can make changes&lt;/em&gt;, then you have not shorted the two pins successfully. Restart the computer and try again.&lt;/li&gt;&#xA;&lt;li&gt;Navigate to the &lt;em&gt;Security&lt;/em&gt; menu &amp;gt; &lt;em&gt;Password&lt;/em&gt; menu&lt;/li&gt;&#xA;&lt;li&gt;Highlight the &lt;em&gt;Supervisor Password&lt;/em&gt; option&lt;/li&gt;&#xA;&lt;li&gt;Short the &lt;code&gt;SDA&lt;/code&gt; and &lt;code&gt;SCL&lt;/code&gt; pins again and keep it shorted&lt;/li&gt;&#xA;&lt;li&gt;Press &lt;kbd&gt;ENTER&lt;/kbd&gt; on the keyboard and then un-short the two pins. You should get a prompt for a &lt;em&gt;New Password&lt;/em&gt; and &lt;em&gt;Confirm New Password&lt;/em&gt;. If you get a prompt for the &lt;em&gt;Current Password&lt;/em&gt;, close the menu and try again.&lt;/li&gt;&#xA;&lt;li&gt;Enter any password you want to set, or leave it blank for no password.&lt;/li&gt;&#xA;&lt;li&gt;After confirming the password, press &lt;kbd&gt;F10&lt;/kbd&gt; to save changes.&lt;/li&gt;&#xA;&lt;li&gt;If you are trying to remove the the &amp;ldquo;Security password retry count exceeded&amp;rdquo; message, you must load default settings by pressing &lt;kbd&gt;F9&lt;/kbd&gt; and save with &lt;kbd&gt;F10&lt;/kbd&gt;. This does not affect passwords.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;uefi-based-procedure&#34;&gt;UEFI based procedure&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;Turn on the device&lt;/li&gt;&#xA;&lt;li&gt;As soon as the backlight of the screen turns on, short &lt;code&gt;SDA&lt;/code&gt; and &lt;code&gt;SCL&lt;/code&gt; pins and keep it shorted.&lt;/li&gt;&#xA;&lt;li&gt;Press &lt;kbd&gt;F1&lt;/kbd&gt; repeatedly to enter BIOS setup. You should be taken directly into the BIOS setup. Un-short the two pins. If you are shown a password prompt, switch the device off and try again.&lt;/li&gt;&#xA;&lt;li&gt;Navigate to the &lt;em&gt;Security&lt;/em&gt; menu &amp;gt; &lt;em&gt;Password&lt;/em&gt; menu and set a &lt;em&gt;Supervisor Password&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;After confirming the password, press &lt;kbd&gt;F10&lt;/kbd&gt; to save changes.&lt;/li&gt;&#xA;&lt;li&gt;If you are trying to remove the the &amp;ldquo;Security password retry count exceeded&amp;rdquo; message, you must load default settings by pressing &lt;kbd&gt;F9&lt;/kbd&gt; and save with &lt;kbd&gt;F10&lt;/kbd&gt;. This does not affect passwords.&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
        </item><item>
            <title>DER Laptop BIOS Unlock</title>
            <link>https://davidzou.com/blog/der-laptop-bios-unlock/</link>
            <pubDate>Mon, 28 Mar 2016 00:00:00 +0000</pubDate>
            <guid>https://davidzou.com/blog/der-laptop-bios-unlock/</guid>
            <description>&lt;p&gt;The DER (&lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/Digital_Education_Revolution&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Digital Education Revolution&lt;/a&gt;) lasted 5 years starting in 2009, with the last generation of laptops handed out in 2013.&lt;/p&gt;&#xA;&lt;p&gt;The first two models were pretty rubbish laptops. They had tiny screens and the S10e had unacceptably small keys. All models except the X131e had an SSD, and the DET SOE image was horrendously slow. They had a plethora amount of software installed and they didn&amp;rsquo;t make much of an effort to prevent useless services and startup entries. The login process was unbearable&amp;hellip; at least for me (I&amp;rsquo;ve been made impatient thanks to SSDs).&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Year&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Model&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Machine Type&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Storage&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;2009&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;IdeaPad S10e&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;4333&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;160GB HDD&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;2010&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;ThinkPad Mini 10&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;3507&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;160GB HDD&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;2011&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;ThinkPad Edge 11&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;0328&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;160GB HDD&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;2012&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;ThinkPad X130e&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;2338&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;320GB HDD&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;2013&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;ThinkPad X131e&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;3367&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;120GB SSD&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;The laptops have a BIOS supervisor password and was locked until the owner of the laptop finished year 12 or the school uses it as a T4L device. The BIOS was configured to boot from the internal HDD only. When a student finishes year 12, the laptops are It&amp;rsquo;s the school&amp;rsquo;s decision who gets to keep the laptop after year 12, but most schools allowed students to keep the laptops unless they didn&amp;rsquo;t want it. When a student is graduating, a new entry should show up in &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/System_Center_Configuration_Manager&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;SCCM&lt;/a&gt; to Unlock the BIOS and image the laptop to a clean install of Windows 7.&lt;/p&gt;&#xA;&lt;p&gt;The DET have recently been decommissioning DER related servers/services and lately there have been problems with the SCCM. There have been imaging DER laptops and joining the DETNSW domain. Seeing as this year&amp;rsquo;s year 12 have last generation of DER laptops and the DER program is pretty much non-existent, I would show the procedure to unlock the BIOS, for any people who still have a locked BIOS and have physical access to the internals of the laptop.&lt;/p&gt;&#xA;&lt;p&gt;For all the IT people who work with these DER laptops, you can actually obtain the BIOS unlock binaries from the SCCM after starting the DER Grad Unlock. The SCCM will create some folders in the system drive while it performs the unlock. You can suspend the SCCM process using Sysinternals Process Explorer after it starts and downloads the required files. You can then spend all the time you need to obtain the required permissions to access the files and make a copy. If you want a copy of the files, shoot me an email to my det nsw email account. You can find me on SMU by searching for my last name (the entry that has a Business Telephone No. ending in 1).&lt;/p&gt;&#xA;&lt;p&gt;I have already written an article explaining how to bypass the supervisor password if are able to disassemble the laptop. In this post, I will provide a guide to disassembling the last three generations of DER laptops and removing the supervisor password.&lt;/p&gt;&#xA;&lt;p&gt;The above-mentioned article is &lt;a class=&#34;link&#34; href=&#34;https://davidzou.com/articles/bios-password-bypass&#34; &gt;available here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;required-tools&#34;&gt;Required Tools&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;Torx T6 screwdriver&lt;/li&gt;&#xA;&lt;li&gt;Philips #1 screwdriver&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;recommended-tools&#34;&gt;Recommended Tools&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;USB keyboard&lt;/li&gt;&#xA;&lt;li&gt;Spudger or fingernails&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;lenovo-edge-11-0328&#34;&gt;Lenovo Edge 11 (0328)&#xA;&lt;/h2&gt;&lt;h3 id=&#34;disassembly&#34;&gt;Disassembly&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;Remove the back cover by unscrewing the three torx screws&lt;/li&gt;&#xA;&lt;li&gt;Remove the battery pack and then remove the two large flat Phillips screws holing the keyboard.&lt;/li&gt;&#xA;&lt;li&gt;Remove the HDD by removing the two M2x7 screws and sliding it out&lt;/li&gt;&#xA;&lt;li&gt;Remove the keyboard by pushing it up and out though the HDD bay. The keyboard is attached by two &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/Flexible_flat_cable&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;flat flex&lt;/a&gt; cables. The larger connector can be unlocked by sliding the black ends of the connector towards the trackpad. The smaller connector has a locking lever which can be pried up with a fingernail or tweezers.&lt;/li&gt;&#xA;&lt;li&gt;Disconnect the two flat flex cables from the mainboard in a similar manner to the smaller connector on the keyboard. One is for the trackpad and one for the power switch).&lt;/li&gt;&#xA;&lt;li&gt;Disconnect the microphone from the mainboard by sliding the black part of the connector towards the right. (The connector is located under the bottom left corner of the keyboard.&lt;/li&gt;&#xA;&lt;li&gt;Remove the three M2x7 screws exposed after removing the keyboard&lt;/li&gt;&#xA;&lt;li&gt;Remove the part of the chassis which consists of the palm rest, trackpad and power button by using a spudger or running fingernails between the main chassis and the palm rest. This part is held together with small plastic hooks running around the chassis. Apply a little force to unhook them.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;locating-the-eeprom-chip&#34;&gt;Locating the EEPROM Chip&#xA;&lt;/h3&gt;&lt;p&gt;The EEPROM chip is located to the right of the speaker connector. It should be a chip labelled &lt;code&gt;L08&lt;/code&gt; but could labelled &lt;code&gt;PS08A&lt;/code&gt; or be a different chip.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Lenovo Edge 11 (0328) EEPROM L08&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;427px&#34; data-flex-grow=&#34;178&#34; height=&#34;1077&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_Edge11_0328_EEPROM.jpg&#34; srcset=&#34;https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_Edge11_0328_EEPROM_hu_fdae576b68f6e647.jpg 800w, https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_Edge11_0328_EEPROM_hu_b8e4cbaa7a71402.jpg 1600w, https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_Edge11_0328_EEPROM.jpg 1920w&#34; width=&#34;1920&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;other-information&#34;&gt;Other Information&#xA;&lt;/h3&gt;&lt;p&gt;The Edge 11 runs a Legacy BIOS. Follow the procedure for BIOS based systems.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;SDA&lt;/code&gt; and &lt;code&gt;SCL&lt;/code&gt; pins are the two above the number 8 of the label (the opposite corner of the dot/circle marker).&lt;/p&gt;&#xA;&lt;p&gt;As the power button is located on the part of the chassis which is removed, you will lose the functionality of the power button. You can still simulate a press of the button by shorting the pins that lead to the power button. The pins for the power button are the first two pins (from the left) of connector &lt;code&gt;CN2&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &#xA;    &lt;blockquote&gt;&#xA;        &#xA;    &lt;blockquote&gt;&#xA;        &#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;Be extremely careful when shorting these pins. Shorting pins other than the first two will result in you damaging the power management chip and your device will have problems powering off!&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Lenovo Edge 11 (0328) Power Button Connector&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;426px&#34; data-flex-grow=&#34;177&#34; height=&#34;1080&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_Edge11_0328_PowerConnector.jpg&#34; srcset=&#34;https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_Edge11_0328_PowerConnector_hu_fa0a643ef40efa57.jpg 800w, https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_Edge11_0328_PowerConnector_hu_d75743cda306c071.jpg 1600w, https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_Edge11_0328_PowerConnector.jpg 1920w&#34; width=&#34;1920&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;lenovo-x130e-2338-and-x131e-3367&#34;&gt;Lenovo X130e (2338) and X131e (3367)&#xA;&lt;/h2&gt;&lt;h3 id=&#34;disassembly-1&#34;&gt;Disassembly&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;Remove the back cover by unscrewing the three torx screws&lt;/li&gt;&#xA;&lt;li&gt;Remove the HDD/SSD by removing the two M2x7 screws and sliding it out&lt;/li&gt;&#xA;&lt;li&gt;Remove four M2x8 screws holding chassis and keyboard&lt;/li&gt;&#xA;&lt;li&gt;Remove the two M2.5x5 screws to the left and right of the battery pack&lt;/li&gt;&#xA;&lt;li&gt;Slide entire keyboard up towards the battery and then lift up from the bottom&lt;/li&gt;&#xA;&lt;li&gt;Disconnect the two &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/Flexible_flat_cable&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;flat flex&lt;/a&gt; cables (for the keyboard and TrackPoint) from their connectors by levering the front part of the connector up.&lt;/li&gt;&#xA;&lt;li&gt;Disconnect the flat flex cables from the mainboard in a similar manner to the ones on the keyboard.&lt;/li&gt;&#xA;&lt;li&gt;Disconnect the microphone by sliding the connector towards the right&lt;/li&gt;&#xA;&lt;li&gt;Remove the three M2x5 screws exposed after removing the keyboard&lt;/li&gt;&#xA;&lt;li&gt;Remove the part of the chassis which consists of the palm rest and trackpad by using a spudger or running fingernails between the main chassis and the palm rest. This part is held together with small plastic hooks running around the chassis. Apply a little force to unhook them.&lt;/li&gt;&#xA;&lt;li&gt;Remove the piece of black plastic around the microphone connector (to the right of the USB ports on the left hand side) as the EEPROM is located underneath.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;locating-the-eeprom-chip-1&#34;&gt;Locating the EEPROM Chip&#xA;&lt;/h3&gt;&lt;p&gt;The EEPROM chip is located just below the microphone connector. I have seen two chips used for the EEPROM. It should be a chip labelled &lt;code&gt;L08&lt;/code&gt; or &lt;code&gt;PS08A&lt;/code&gt; but could be a different chip.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Lenovo X130e (2338) and X131e (3367) EEPROM L08&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;427px&#34; data-flex-grow=&#34;178&#34; height=&#34;1078&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_X130e_X131e_EEPROM.jpg&#34; srcset=&#34;https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_X130e_X131e_EEPROM_hu_1111746defe68114.jpg 800w, https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_X130e_X131e_EEPROM_hu_1a4283e943dcf0e5.jpg 1600w, https://davidzou.com/blog/der-laptop-bios-unlock/Lenovo_X130e_X131e_EEPROM.jpg 1920w&#34; width=&#34;1920&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;other-information-1&#34;&gt;Other Information&#xA;&lt;/h3&gt;&lt;p&gt;The X130e and X131e run UEFI. Follow the procedure for UEFI based systems.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;SDA&lt;/code&gt; and &lt;code&gt;SCL&lt;/code&gt; pins are the two above the number 8 of the &lt;code&gt;L08&lt;/code&gt; label or the 8A of the &lt;code&gt;PS08A&lt;/code&gt; label (the opposite corner of the dot/circle marker).&lt;/p&gt;</description>
        </item><item>
            <title>NFC Security - Armourcard Active Jammer</title>
            <link>https://davidzou.com/blog/nfc-security-armourcard-active-jammer/</link>
            <pubDate>Mon, 14 Mar 2016 00:00:00 +0000</pubDate>
            <guid>https://davidzou.com/blog/nfc-security-armourcard-active-jammer/</guid>
            <description>&lt;p&gt;NFC is becoming the de facto standard for contact-less systems. For the convenience, we are potentially giving up some privacy and security.&lt;/p&gt;&#xA;&lt;p&gt;Contactless payment technologies such as Mastercard Paypass and Visa Paywave are designed for maximum flexibility for merchants, not maximum security for customers. Some merchants may choose to have transactions processed immediately, while others may choose to process them in batch after hours. Whatever the reasons, the designers of the protocol have chosen to make the following information readable in plaintext through NFC.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Card Number (First four digits indicate the type of card)&lt;/li&gt;&#xA;&lt;li&gt;Expiry&lt;/li&gt;&#xA;&lt;li&gt;Date and amounts of the last 10 transactions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With this information, credit card fraud can be commited. You may think that without a full name and CVV (the security number also know as the CVC or CVV2) you cannot process a transaction, however, the only number required to process a transaction is the card number. Merchants are able to pay higher processing fees to allow transactions without extra information such as the expiry and CVV. Amazon is a famous merchant that allows transactions without the security code.&lt;/p&gt;&#xA;&lt;p&gt;Granted, you are covered if money is stolen from your account, however you need to actively check your transactions regularly for fraudulent transactions to report. This can be time consuming and difficult if you have to verify each and every transaction.&lt;/p&gt;&#xA;&lt;p&gt;Sydney public transport users using the Opal card can provide the following information through NFC:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Card number&lt;/li&gt;&#xA;&lt;li&gt;Card Balance&lt;/li&gt;&#xA;&lt;li&gt;Last tap details&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Transport type&lt;/li&gt;&#xA;&lt;li&gt;Tap on/off&lt;/li&gt;&#xA;&lt;li&gt;Time and Date&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Number of journeys used in the last week the card was last used&lt;/li&gt;&#xA;&lt;li&gt;If Auto Top-Up is enabled&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;NFC Reader Apps&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;270px&#34; data-flex-grow=&#34;112&#34; height=&#34;1280&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/nfc-security-armourcard-active-jammer/NFC_Reader_Apps.png&#34; srcset=&#34;https://davidzou.com/blog/nfc-security-armourcard-active-jammer/NFC_Reader_Apps_hu_ff8f5083a4656f3a.png 800w, https://davidzou.com/blog/nfc-security-armourcard-active-jammer/NFC_Reader_Apps.png 1442w&#34; width=&#34;1442&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The information mentioned can be viewed easily with the &lt;a class=&#34;link&#34; href=&#34;https://play.google.com/store/apps/details?id=com.github.devnied.emvnfccard&amp;amp;noprocess&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Credit Card Reader&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;https://play.google.com/store/apps/details?id=au.com.opal.travel&amp;amp;noprocess&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Opal Travel&lt;/a&gt; apps. To obtain the information, any NFC reader can be used.&lt;/p&gt;&#xA;&lt;p&gt;To protect myself, I have been using an &lt;a class=&#34;link&#34; href=&#34;http://shop.eaglecreek.com/rfid-international-wallet/d/1352&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Eagle Creek RFID International&lt;/a&gt; wallet for the last two years. These types of RFID shielding contraptions are usually lined with a layer of foil to shield the magnetic fields emitted by NFC/RFID readers.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Eagle Creek RFID International Wallet&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;360px&#34; data-flex-grow=&#34;150&#34; height=&#34;1280&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/nfc-security-armourcard-active-jammer/EagleCreekRFIDInternationalWallet.jpg&#34; srcset=&#34;https://davidzou.com/blog/nfc-security-armourcard-active-jammer/EagleCreekRFIDInternationalWallet_hu_1025e34294c4c686.jpg 800w, https://davidzou.com/blog/nfc-security-armourcard-active-jammer/EagleCreekRFIDInternationalWallet_hu_6b8c15ca1866b52b.jpg 1600w, https://davidzou.com/blog/nfc-security-armourcard-active-jammer/EagleCreekRFIDInternationalWallet.jpg 1920w&#34; width=&#34;1920&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;NFC/RFID communications work by the reader sending out a magnetic field and inducing it into the NFC/RFID card, which gets power through inductive coupling. The card then provides feedback to the magnetic pulses by loading down its antenna coil. The NFC/RFID reader is able to detect the card loading down the coils, and thus can read information back from the card.&lt;/p&gt;&#xA;&lt;p&gt;The issue with passive shielding is that given a powerful enough magnetic field, you can still induce power though the shielding material. I recently got access to a more powerful RFID reader and was able to read a card though the RFID shielding wallet.&lt;/p&gt;&#xA;&lt;p&gt;Just last week, I stumbled upon the Armourcard active jammer. The Armourcard is a jamming device as opposed to the more common shielding material. This means that there is circuitry inside the card which detects RFID/NFC signals emitted by a reader and emits its own scrambled signal to interfere with communications.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Front of the Armourcard&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;Armourcard_Front.jpg?lighbox&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Armourcard is credit card sized and is constructed from a double layer PCB with black solder mask. It is approximately 0.8mm thick (as thick as a credit card) around the edges and approximately 3mm thick at the bulge  (the white parts of the card). The front side contains two LEDs and exposed traces that act as a touch sensitive button.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Back of the Armourcard&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;427px&#34; data-flex-grow=&#34;178&#34; height=&#34;1077&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_Back.jpg&#34; srcset=&#34;https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_Back_hu_fabcb99309cab202.jpg 800w, https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_Back_hu_c539193e0af8eb1f.jpg 1600w, https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_Back.jpg 1920w&#34; width=&#34;1920&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The back side holds the traces which act as the antenna coil.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Armourcard near an NFC/RFID reader&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;384px&#34; data-flex-grow=&#34;160&#34; height=&#34;1199&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_Active.jpg&#34; srcset=&#34;https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_Active_hu_188a9bba129cb7f0.jpg 800w, https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_Active_hu_79b44a5608c78863.jpg 1600w, https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_Active.jpg 1920w&#34; width=&#34;1920&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The red LED flashes when the card is actively jamming a signal. The button on the front size is used to disable the jamming temporarily and to test the battery. The green LED will flash while the button is touched. As it has active circuitry inside, the Armourcard has a limited lifetime which is claimed to be approximately two years.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Armourcard Active Jamming an NFC card&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;402px&#34; data-flex-grow=&#34;167&#34; height=&#34;1146&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_ActiveWithCard.jpg&#34; srcset=&#34;https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_ActiveWithCard_hu_de7759cf890f8ef.jpg 800w, https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_ActiveWithCard_hu_32f4cbe88ab2ba7e.jpg 1600w, https://davidzou.com/blog/nfc-security-armourcard-active-jammer/Armourcard_ActiveWithCard.jpg 1920w&#34; width=&#34;1920&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;With the low powered NFC reader in my Xperia Z1c, the jamming LED starts flashing when the phones is 6cm away from the Armourcard. In comparison, the phone is only able to read a card when it is 3cm away from the phone. This instils some confidence as the Armourcard will always engage before the reader is able to read a card. With the Armourcard anywhere near a card, the NFC/RFID reader will fail to detect a card present.&lt;/p&gt;</description>
        </item><item>
            <title>DETNSW SSO Authentication: Convenience vs. Security</title>
            <link>https://davidzou.com/blog/detnsw-sso-authentication-convenience-vs-security/</link>
            <pubDate>Sat, 27 Feb 2016 00:00:00 +0000</pubDate>
            <guid>https://davidzou.com/blog/detnsw-sso-authentication-convenience-vs-security/</guid>
            <description>&lt;p&gt;While writing the &lt;a class=&#34;link&#34; href=&#34;https://gist.github.com/davidzou2131/7d5d4a9a278bd66a4f22&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;DER Batch Reset Tool&lt;/a&gt;, I was forced to investigate how the DETNSW handles its SSO. The original plan was just to obtain a session cookie from the browser and use the cookie in the reset tool, but it was rather tedious copying a cookie every few minutes while coding up the script. The batch reset tool uses the Python requests module, which has session support to store cookies between requests.&lt;/p&gt;&#xA;&lt;p&gt;The DETNSW SSO server is probably somewhere around a decade old, as I remember using the same system as a student when I first started high school. The one thing that has changed is that one less set of credentials is required when using one of the DETNSW&amp;rsquo;s services such as the student/staff portal.&lt;/p&gt;&#xA;&lt;p&gt;All the computers connected to the DETNSW&amp;rsquo;s network are part of a state-wide intranet in the 10.x.x.x Class A network. Direct connections to the internet are filtered, thus all internet traffic must go through the department HTTP proxy &lt;code&gt;proxy.det.nsw.edu.au:8080&lt;/code&gt; with the exception of some licensing and update servers. The proxy is an HTTP proxy with Basic authentication (through HTTP headers of the first connection). They have no support for HTTPS proxy.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Capturing Proxy Authentication Credentials&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;1043px&#34; data-flex-grow=&#34;434&#34; data-title-escaped=&#34;Use Wireshark to crack the extra strong base64 encryption!&#34; height=&#34;153&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/detnsw-sso-authentication-convenience-vs-security/Proxy_Auth.png&#34; title=&#34;Use Wireshark to crack the extra strong base64 encryption!&#34; width=&#34;665&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Initially, to visit the student/staff portal, one would need to enter their username and password for the proxy authentication and then again on the SSO login page. However, some years later, the SSO login page got replaced with a page which seems to automatically authenticate users based on the proxy authentication. One can only assume this was done because staff complained about having to enter their credentials twice if they just opened a browser and want to visit a DETNSW site.&lt;/p&gt;&#xA;&lt;p&gt;When requesting a DETNSW site, you get redirected to this non-secure URL, where some magic happens and you are automatically authenticated. Is this yet another page for details to leak?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;SSO Auto Login&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;1301px&#34; data-flex-grow=&#34;542&#34; data-title-escaped=&#34;This is the page which you see for a few seconds while the magic happens&#34; height=&#34;165&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/detnsw-sso-authentication-convenience-vs-security/SSO_Autologin.png&#34; srcset=&#34;https://davidzou.com/blog/detnsw-sso-authentication-convenience-vs-security/SSO_Autologin_hu_110b60725c483bfc.png 800w, https://davidzou.com/blog/detnsw-sso-authentication-convenience-vs-security/SSO_Autologin.png 895w&#34; title=&#34;This is the page which you see for a few seconds while the magic happens&#34; width=&#34;895&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;And here is the page itself. Looks like an innocent enough form and it POSTs to a secure site! Do we have some actual security?&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://www.w3.org/1999/xhtml&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Portal Login&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;http-equiv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;content-type&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/html; charset=iso-8859-1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;author&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Andy {REDACTED}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;../jfunctions.js&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;javascript: submit_form();&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;align&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;center&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Please wait while you are being logged into the DET Enterprise Portal...&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;loginform&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;post&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;https://sso.det.nsw.edu.au/sso/UI/Login?goto=...&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;ssoDetails&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;dXNlcm5hbWU=:cGFzc3dvcmQ=&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;                     &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;site2pstoretoken&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;ssousername&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;IDToken1&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- BA for openam --&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;IDToken2&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- BA for openam --&amp;gt;&lt;/span&gt;           &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Oddly enough, if you POST all the details shown here using the Python requests module, it doesn&amp;rsquo;t authenticate the user and redirects you to the sign in page to enter your credentials. So what&amp;rsquo;s the difference between the browser and Python requests?&lt;/p&gt;&#xA;&lt;p&gt;JavaScript. They must be using JS to do more than just submit the form automatically. The hidden value &lt;code&gt;ssoDetails&lt;/code&gt; is already part of the form but looks suspiciously like base64. What could they possibly be doing?&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;base64Chars&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;C&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;D&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;E&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;F&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;G&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;H&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;I&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;J&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;K&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;L&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;M&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;N&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;O&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;P&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;Q&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;R&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;S&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;T&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;U&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;V&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;W&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;X&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;Y&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;d&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;e&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;f&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;g&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;h&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;i&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;j&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;k&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;l&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;m&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;n&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;o&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;p&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;q&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;s&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;t&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;u&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;v&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;x&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;y&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;5&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;6&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;7&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;8&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;9&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;+&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;submit_form&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;details&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;forms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;loginform&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;elements&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ssoDetails&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;details_array&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;details&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;forms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;loginform&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;elements&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ssousername&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;details_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;forms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;loginform&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;elements&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;details_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;forms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;loginform&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;elements&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;IDToken1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;details_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// for openam&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;forms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;loginform&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;elements&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;IDToken2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;details_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// for openam&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;forms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;loginform&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;submit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Surprise surprise&amp;hellip; base64. (The entire JS file is &lt;a class=&#34;link&#34; href=&#34;https://gist.github.com/davidzou2131/96cf9278f81354689b83&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;available here&lt;/a&gt;). It looks like they have implemented base64, probably for IE users as IE only had base64 JS functions from version 10 onwards.&lt;/p&gt;&#xA;&lt;p&gt;And at first glance, it&amp;rsquo;s evident they are populating the form with details from the &lt;code&gt;ssoDetails&lt;/code&gt; form value. This means the DETNSW servers have an un-hashed copy of everyone&amp;rsquo;s password stored somewhere on a server and is willing to send out a base64 encoded version of it through an unencrypted connection.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s understandable that they need to store a plaintext password, as the department has countless numbers of systems to integrate and some of them are ancient. What&amp;rsquo;s not understandable is why the SSO server must take a username and password. Surely they could have programmed the SSO server to talk to the proxy authentication server and use a token of some sort.&lt;/p&gt;&#xA;&lt;p&gt;So now, we don&amp;rsquo;t even need Wireshark to steal a password, we just need to get the target user to authenticate the proxy connection.&lt;/p&gt;&#xA;&lt;p&gt;Taking a further look at the response headers for that page which returns us the username and password, we can see it doesn&amp;rsquo;t even disable caching.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;SSO Authentication Headers&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;661px&#34; data-flex-grow=&#34;275&#34; data-title-escaped=&#34;asapp.det.nsw.edu.au: As Soon As Possible Pwnage?&#34; height=&#34;309&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/detnsw-sso-authentication-convenience-vs-security/SSO_Auth_Headers.png&#34; srcset=&#34;https://davidzou.com/blog/detnsw-sso-authentication-convenience-vs-security/SSO_Auth_Headers_hu_6729e977404c9c74.png 800w, https://davidzou.com/blog/detnsw-sso-authentication-convenience-vs-security/SSO_Auth_Headers.png 852w&#34; title=&#34;asapp.det.nsw.edu.au: As Soon As Possible Pwnage?&#34; width=&#34;852&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ideally, the server should set the following headers:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-HTTP&#34; data-lang=&#34;HTTP&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;Cache-Control: no-cache, no-store, must-revalidate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;Pragma: no-cache&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;Expires: 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;We can just trawl through the browser&amp;rsquo;s cache and extract the details. So now we don&amp;rsquo;t even need the user to authenticate on the spot!&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;SSO Authentication Cache&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;310px&#34; data-flex-grow=&#34;129&#34; data-title-escaped=&#34;This can be found in the page about:cache&#34; height=&#34;527&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/detnsw-sso-authentication-convenience-vs-security/SSO_Auth_Cache.png&#34; title=&#34;This can be found in the page about:cache&#34; width=&#34;681&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Fortunately, if you haven&amp;rsquo;t been active on a DETNSW site for a few minutes, they will invalidate your session and prompt you to log in manually. Okay, so what if the cache entry has been overwritten due to newer content and the user has been logged in previously (more than a few minutes ago) in this browser session?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Delete invalidated cookies&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;259px&#34; data-flex-grow=&#34;107&#34; data-title-escaped=&#34;Ctrl+Shift+Del to show this window&#34; height=&#34;389&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://davidzou.com/blog/detnsw-sso-authentication-convenience-vs-security/SSO_ClearCookies.png&#34; title=&#34;Ctrl+Shift+Del to show this window&#34; width=&#34;420&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The solution is 3 key strokes and some clicks away. And since the SSO server doesn&amp;rsquo;t talk to the proxy authentication server, you are treated as if you had just opened the browser and will be handed the account password. So this security timeout feature is essentially useless. Due to limitations of the HTTP proxy authentication, there is no proper way for the proxy server to know when a user entered their credentials into the browser (since the browser keeps a copy of the credentials in memory and uses it automatically every time a new connection is made).&lt;/p&gt;&#xA;&lt;h3 id=&#34;in-summary&#34;&gt;In summary&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;Proxy is HTTP where the password is sent in plaintext (base64 encoded)&lt;/li&gt;&#xA;&lt;li&gt;User credentials are stored in plaintext (un-hashed)&lt;/li&gt;&#xA;&lt;li&gt;User credentials are sent to the user to process the login&lt;/li&gt;&#xA;&lt;li&gt;User credentials are not protected with TLS&lt;/li&gt;&#xA;&lt;li&gt;User credentials are allowed to be cached in the browser&amp;rsquo;s cache&lt;/li&gt;&#xA;&lt;li&gt;SSO auto-login server can&amp;rsquo;t determine how long since a user authenticated with the proxy&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll give Andy the benefit of the doubt and assume he didn&amp;rsquo;t really have a choice when he implemented this auto-login. I&amp;rsquo;m sure someone has signed off on his work knowing exactly how bad the security is.&lt;/p&gt;&#xA;&lt;p&gt;The good news is that DETNSW is planning to move to NTLM-authentication. This is fine for devices part of the DETNSW domain and using Internet Explorer, any other browser/device will still be required to enter a username and password. The bad news is that NTLM is really broken, as it is vulnerable to MITM and pass-the-hash attacks. Even with these vulnerabilities, it is still way more secure than plaintext passwords. Hopefully they add support for HTTPS proxy for non-domain computers.&lt;/p&gt;</description>
        </item></channel>
</rss>
