<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Handelsbanken on Nullbyte blog</title><link>https://blog.nullbyte.eu/tags/handelsbanken/</link><description>Recent content in Handelsbanken on Nullbyte blog</description><generator>Hugo -- 0.166.0</generator><language>en-us</language><lastBuildDate>Fri, 31 Oct 2014 00:00:00 -0400</lastBuildDate><atom:link href="https://blog.nullbyte.eu/tags/handelsbanken/index.xml" rel="self" type="application/rss+xml"/><item><title>Open curtains in Swish payments service</title><link>https://blog.nullbyte.eu/open-curtains-in-swish-payments-service/</link><pubDate>Thu, 23 Oct 2014 22:54:00 -0400</pubDate><guid>https://blog.nullbyte.eu/open-curtains-in-swish-payments-service/</guid><description>Vulnerability in Swish let any user access any other user&amp;rsquo;s complete transaction history.</description><content:encoded><![CDATA[<img src="bankers2.png" alt="Bankers" style="float:right; display:block; margin: 0 0 0 1rem;" width="300" height="216">
<p>While doing some research for Bankdroid during the hot summer days I decided to take a look at the increasingly popular payment app <a href="http://www.getswish.se/">Swish</a>. Swish, developed by <a href="http://hiq.se/#kund/CASE/Swish">HiQ</a> for Sweden&rsquo;s six major banks (Danske Bank, Handelsbanken, Länsförsäkringar Bank, Nordea, SEB and Swedbank/Sparbankerna), lets its users send and receive instant payments without the hassle of bank transfers.</p>
<h2 id="getting-at-the-traffic">Getting at the traffic</h2>
<p>My first thought was to set up a transparent proxy to be able to observe the traffic between the app and the Swish backend, but that didn&rsquo;t go as smooth as I had hoped. It turned out that they were using a self-signed certificate and had therefore implemented certificate pinning (Moxie Marlinspike&rsquo;s<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> <a href="https://github.com/moxie0/AndroidPinning">AndroidPinning</a> to be precise, licensed under the GPLv3 - meaning that Getswish AB is obligated to hand over a copy of the Android app&rsquo;s source code to anyone who requests it) in their apps. Whether planned or not this solution made the app more secure by mitigating man-in-the-middle attacks - it also meant that I had a new obstacle to overcome as I wouldn&rsquo;t be able to simply connect through my proxy.<br>
After a bit of tweaking and tinkering I was finally able to see all the requests in clear text.</p>
<h2 id="the-api-and-mobilt-bankid">The API and mobilt BankID</h2>
<p>At first glance nothing looked out of the ordinary. A simple XML API with a handful of endpoints and, as HiQ boasts on their website<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, using Mobilt BankID for authentication:</p>
<blockquote>
<p>Betalningarna godkänns med hjälp av mobilt BankID, vilket gör att lösningen är lika säker som de olika bankernas internettjänster.</p>
</blockquote>
<p>The way mobilt BankID was implemented was that a request that required authentication would return a BankID reference number and the app would, after the user had successfully signed with mobilt BankID, execute the same request again (this time including the reference number).<br>
This seemed like straightforward and secure enough solution.</p>
<h2 id="the-phone-number-in-the-request">The phone number in the request</h2>
<p>A thing that caught my attention was that the user&rsquo;s MSISDN/phone number was included in the payment history request: <code>&hellip;/mpc-swish/rest/paymenthistory/<strong>46701234567</strong>/ALL/0/30/</code>.<br>
Why would the server need the MSISDN if we were already authenticated?<br>
What would happen if the MSISDN was changed to another user&rsquo;s?</p>
<h2 id="authentication-but-no-authorization">Authentication, but no authorization</h2>
<p>Apparently, in the case of payment history requests, mobilt BankID was only used for authentication and not for authorization.<br>
<strong>An authenticated user could retrieve any other users complete transaction history</strong> simply by changing the MSISDN in the request. The Swish server never checked whether the user was authorized to make that request or not.<br>
The transaction history includes phone numbers, full names, datetimes, amounts and messages for every person you&rsquo;ve ever sent/received a Swish payment to/from.</p>
<p>As the developers were completely unaware of this vulnerability it is quite safe to assume that is has existed since Swish was launched nearly 2 years ago (December 2012) and at the time of discovery affected over 1.4 million Swish users<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>.</p>
<h2 id="reporting-it">Reporting it</h2>
<p>Getting a hold of someone at Swish was another challenge. There&rsquo;s no contact info on their website (only contact info for the connected banks) and their PR folks on Twitter <a href="https://twitter.com/nbyte/status/484848113018888192">weren&rsquo;t very helpful</a>.</p>
<p>After emailing all of the affected banks and describing the problem a couple of them actually replied and a day later I was contacted by someone in charge of the project. A short week later the vulnerability was fixed and everyone was happy again.</p>
<p><strong>TLDR</strong>: Vulnerability in Swish let any user access any other user&rsquo;s complete transaction history.</p>
<h2 id="update-regarding-use-of-gpl-code-in-the-swish-payments-app">Update regarding use of GPL code in the Swish payments app</h2>
<p><em>31 Oct 2014</em></p>
<p>There has been some discussion regarding the claim that Getswish AB is using GPL licensed code in their application. Getswish AB (via their press managers at <a href="http://www.theworldloves.com/">The World Loves</a>) are denying<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup><sup>,</sup><sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup><sup>,</sup><sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> that any GPL licensed code is used in the Swish payments app. Myself and others who have examined the app are confident that (a modified version of) AndroidPinning has been used.</p>
<p>Let&rsquo;s take a look at the code from both projects. <em>PinningTrustManager</em> from AndroidPinning can be found at <a href="https://github.com/moxie0/AndroidPinning/blob/master/src/org/thoughtcrime/ssl/pinning/PinningTrustManager.java">https://github.com/moxie0/AndroidPinning/blob/master/src/org/thoughtcrime/ssl/pinning/PinningTrustManager.java</a></p>
<p>The code from the Swish app was converted from dex format<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup> to java .class files with the help of <a href="https://code.google.com/p/dex2jar/">dex2jar</a> and the java code was reconstructed from the .class files using <a href="http://jd.benow.ca/">JD Project</a>. The source for the reconstructed code can be found at <a href="https://gist.github.com/liato/1e8f11c017353109dd82">https://gist.github.com/liato/1e8f11c017353109dd82</a></p>
<p>It&rsquo;s important to note that reconstructing java code from a .class file doesn&rsquo;t always produce the same code that was compiled but all method signatures and string literals are left untouched.</p>
<p>As you can see by comparing the two classes there are too many similarities for it to be an original piece of code.<br>
For starters, both the class from AndroidPinning and the one from Swish is called <em>PinningTrustManager</em>.<br>
Identical method signatures that are not inherited from the <em>X509TrustManager</em> interface<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup> include:</p>
<ul>
<li><code>private byte[] hexStringToByteArray(String)</code></li>
<li><code>private TrustManager[] initializeSystemTrustManagers()</code></li>
<li><code>private boolean isValidPin(X509Certificate)</code></li>
</ul>
<p>Identical field declarations include:</p>
<ul>
<li><code>private final List&lt;byte[]&gt; pins</code></li>
<li><code>private final SystemKeyStore systemKeyStore</code></li>
</ul>
<p>They even have the same exact exception message for <code>checkClientTrusted(X509Certificate[], String)</code>!</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">CertificateException</span><span class="p">(</span><span class="s">&#34;Client certificates not supported!&#34;</span><span class="p">);</span><span class="w">
</span></span></span></code></pre></div><p>The examined apk was downloaded 4th of July 2014 and can be found at <a href="http://nullbyte.eu/se.bankgirot.swish_2.0_6023.apk">http://nullbyte.eu/se.bankgirot.swish_2.0_6023.apk</a></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="http://www.thoughtcrime.org/">http://www.thoughtcrime.org/</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="http://hiq.se/#kund/CASE/Swish">http://hiq.se/#kund/CASE/Swish</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="http://www.getswish.se/">http://www.getswish.se/</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="https://www.facebook.com/getswish/posts/10152347980456949?comment_id=10152349476451949&amp;offset=0&amp;total_comments=3">https://www.facebook.com/getswish/posts/10152347980456949?comment_id=10152349476451949&amp;offset=0&amp;total_comments=3</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="https://twitter.com/peppelorum/status/527073721593643009">https://twitter.com/peppelorum/status/527073721593643009</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p><a href="https://twitter.com/ajtowf/status/527238687701368832">https://twitter.com/ajtowf/status/527238687701368832</a>&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p><a href="https://source.android.com/devices/tech/dalvik/dex-format.html">https://source.android.com/devices/tech/dalvik/dex-format.html</a>&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p><a href="http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/X509TrustManager.html">http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/X509TrustManager.html</a>&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>The new Handelsbanken API</title><link>https://blog.nullbyte.eu/the-new-handelsbanken-api/</link><pubDate>Sat, 25 Feb 2012 15:47:00 -0500</pubDate><guid>https://blog.nullbyte.eu/the-new-handelsbanken-api/</guid><description>How the new Handelsbanken login method works: the custom keyboard matrix is sent as an image, but that does not add real security.</description><content:encoded><![CDATA[<p><img src="squirrelandnuts.png" alt="" style="float:right; display:block; margin:0 0 0 1rem;">The updated Handelsbanken app for Android and iPhone uses a new API with a new login method. The login method attempts to increase security by obfuscating some of the data. The custom keyboard matrix for example is sent as an image instead of clear text. <br>
This might make things appear more secure to the end user but doesn&rsquo;t provide any significant technical security benefits. <br>
The following example will demonstrate how the new login method works.</p>
<h2 id="request-to-get-the-custom-keyboard">Request to get the custom keyboard</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-http" data-lang="http"><span class="line"><span class="cl"><span class="nf">GET</span> <span class="nn">/app/init-matrix-xml?height=600&amp;width=628</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
</span></span><span class="line"><span class="cl"><span class="n">Cache-Control</span><span class="o">:</span> <span class="l">no-transform</span>
</span></span><span class="line"><span class="cl"><span class="n">X-SHB-DEVICE-CLASS</span><span class="o">:</span> <span class="l">app</span>
</span></span><span class="line"><span class="cl"><span class="n">User-Agent</span><span class="o">:</span> <span class="l">Mozilla/5.0 (Linux; U; Android 4.0.2; sv-; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30</span>
</span></span><span class="line"><span class="cl"><span class="n">X-SHB-DEVICE-MODEL</span><span class="o">:</span> <span class="l">AND-4.0.2, 2.0.2, Galaxy Nexus</span>
</span></span><span class="line"><span class="cl"><span class="n">X-SHB-MCC</span><span class="o">:</span> <span class="l">240</span>
</span></span><span class="line"><span class="cl"><span class="n">X-SHB-MNC</span><span class="o">:</span> <span class="l">02</span>
</span></span><span class="line"><span class="cl"><span class="err">X-SHB-LC:</span>
</span></span><span class="line"><span class="cl"><span class="g">X-SHB-APP-VERSION: 2.0
</span></span></span><span class="line"><span class="cl"><span class="g">X-SHB-DEVICE-ID: 123456789012345
</span></span></span><span class="line"><span class="cl"><span class="g">Host: m2.handelsbanken.se
</span></span></span><span class="line"><span class="cl"><span class="g">Connection: Keep-Alive
</span></span></span></code></pre></div><p>This is the first request that is sent to <abbr title="Svenska Handelsbanken AB">SHB</abbr> when a user attempts to login. The <code>height</code> and <code>width</code> parameters define the desired size of the keyboard image returned in the response.</p>
<p>All headers starting with <code>X-SHB</code> are sent with every request and mostly contain information about the device that performs the request.</p>
<h2 id="the-keyboard-matrix-response">The keyboard matrix response</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-http" data-lang="http"><span class="line"><span class="cl"><span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="m">200</span> <span class="ne">OK</span>
</span></span><span class="line"><span class="cl"><span class="n">Date</span><span class="o">:</span> <span class="l">Sat, 25 Feb 2012 20:56:29 GMT</span>
</span></span><span class="line"><span class="cl"><span class="n">Server</span><span class="o">:</span> <span class="l">Apache</span>
</span></span><span class="line"><span class="cl"><span class="n">Cache-Control</span><span class="o">:</span> <span class="l">private, proxy-revalidate</span>
</span></span><span class="line"><span class="cl"><span class="n">Content-Language</span><span class="o">:</span> <span class="l">en-US</span>
</span></span><span class="line"><span class="cl"><span class="n">Connection</span><span class="o">:</span> <span class="l">close</span>
</span></span><span class="line"><span class="cl"><span class="n">Content-Type</span><span class="o">:</span> <span class="l">text/html;charset=UTF-8</span>
</span></span><span class="line"><span class="cl"><span class="n">Content-Length</span><span class="o">:</span> <span class="l">10517</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">&lt;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">response</span> <span class="na">code</span><span class="o">=</span><span class="s">&#34;000&#34;</span> <span class="na">label</span><span class="o">=</span><span class="s">&#34;OK&#34;</span> <span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">matrix</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;</span><span class="nt">matrixId</span><span class="p">&gt;</span>009013526<span class="p">&lt;/</span><span class="nt">matrixId</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;</span><span class="nt">matrixMetaData</span><span class="p">&gt;</span>0,5,7,11,13,14<span class="p">&lt;/</span><span class="nt">matrixMetaData</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;</span><span class="nt">image</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;png&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">                <span class="cp">&lt;![CDATA[ ... base64 encoded png data, example below ... ]]&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;/</span><span class="nt">image</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;/</span><span class="nt">matrix</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">response</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>What we&rsquo;re looking for in the response is the <code>matrixId</code> tag (we&rsquo;ll need to send it back to the api when we&rsquo;re logging in) and the <code>image</code> tag.</p>
<p><code>matrixMetaData</code> tells the Android/iPhone app which buttons on the custom keyboard to make clickable. Not very interesting to us so we&rsquo;ll disregard it.</p>
<h2 id="mapping-a-password-to-matrix-positions">Mapping a password to matrix positions</h2>
<p>The <code>image</code> tag contains a base64 encoded transparent png image and looks something like this:</p>
<p><img src="numpad.png" alt="SHB custom keyboard" class="keyboard_matrix"> <br>
The image represents a 4<em>4 matrix where the numbers 0 to 9 have been placed randomly, the remaining 6 positions are empty. <br>
When a user enters a password their real password isn&rsquo;t sent to the api, instead the indices of the selected numbers (in a transposed 4</em>4 matrix) are sent as a concatenated string. <br>
Let&rsquo;s say the users password is 1234 and we&rsquo;ve extracted the following matrix from the image:</p>
<div class="num-matrix"> <span> <span>9</span><span></span><span>6</span><span>8</span> </span> <span> <span class="sel">4</span><span>0</span><span></span><span></span> </span> <span> <span>7</span><span> </span><span>5</span><span class="sel">2</span> </span> <span> <span class="sel">3</span><span></span><span class="sel">1</span><span></span> </span> </div>
<p>Now the only thing that remains to do is to pick out the corresponding index for every number from the matrix below and send it to the api together with the username and matrixId.</p>
<div class="num-matrix"> <span> <span>0</span><span>4</span><span>8</span><span>12</span> </span> <span> <span class="sel">1</span><span>5</span><span>9</span><span>13</span> </span> <span> <span>2</span><span>6</span><span>10</span><span class="sel">14</span> </span> <span> <span class="sel">3</span><span>7</span><span class="sel">11</span><span>15</span> </span> </div>
<p>The user enters the password <code>1234</code> and we get the positions <code>11,14,3,1</code>.</p>
<h2 id="login-request">Login request</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-http" data-lang="http"><span class="line"><span class="cl"><span class="nf">GET</span> <span class="nn">/bb/glss/servlet/ssco_auth4?deviceid=123456789012345&amp;username=8001010000&amp;matrixPos=11,14,3,1&amp;matrixId=009013526&amp;entryId=privpnrpinse&amp;appAction=doAuthentication&amp;JSP_PATH=ssse&amp;language=sv&amp;country=SE&amp;deviceClass=app</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
</span></span><span class="line"><span class="cl"><span class="n">Cache-Control</span><span class="o">:</span> <span class="l">no-transform</span>
</span></span><span class="line"><span class="cl"><span class="n">X-SHB-DEVICE-CLASS</span><span class="o">:</span> <span class="l">app</span>
</span></span><span class="line"><span class="cl"><span class="n">User-Agent</span><span class="o">:</span> <span class="l">Mozilla/5.0 (Linux; U; Android 4.0.2; sv-; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30</span>
</span></span><span class="line"><span class="cl"><span class="n">X-SHB-DEVICE-MODEL</span><span class="o">:</span> <span class="l">AND-4.0.2, 2.0.2, Galaxy Nexus</span>
</span></span><span class="line"><span class="cl"><span class="n">X-SHB-MCC</span><span class="o">:</span> <span class="l">240</span>
</span></span><span class="line"><span class="cl"><span class="n">X-SHB-MNC</span><span class="o">:</span> <span class="l">02</span>
</span></span><span class="line"><span class="cl"><span class="err">X-SHB-LC:</span>
</span></span><span class="line"><span class="cl"><span class="g">X-SHB-APP-VERSION: 2.0
</span></span></span><span class="line"><span class="cl"><span class="g">X-SHB-DEVICE-ID: 123456789012345
</span></span></span><span class="line"><span class="cl"><span class="g">Host: m2.handelsbanken.se
</span></span></span><span class="line"><span class="cl"><span class="g">Connection: Keep-Alive
</span></span></span></code></pre></div><p>We&rsquo;re almost there! But first a short description of some of the parameters: <br>
<code>deviceid</code> - the device id from your Android/iPhone. Should be the same as the one in the header. <br>
<code>username</code> - the users&rsquo; social security number in the format <code>YYMMDDXXXX</code>. <br>
<code>matrixPos</code> - the positions of the numbers we calculated earlier. <br>
<code>matrixId</code> - the same id that we got from our first request to the api.</p>
<h2 id="login-response">Login response</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-http" data-lang="http"><span class="line"><span class="cl"><span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="m">200</span> <span class="ne">Document follows</span>
</span></span><span class="line"><span class="cl"><span class="n">Date</span><span class="o">:</span> <span class="l">Sat, 25 Feb 2012 20:58:41 GMT</span>
</span></span><span class="line"><span class="cl"><span class="n">Server</span><span class="o">:</span> <span class="l">Apache</span>
</span></span><span class="line"><span class="cl"><span class="n">Cache-Control</span><span class="o">:</span> <span class="l">private, proxy-revalidate, no-cache=&#34;set-cookie, set-cookie2&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">Accept-Ranges</span><span class="o">:</span> <span class="l">bytes</span>
</span></span><span class="line"><span class="cl"><span class="n">Expires</span><span class="o">:</span> <span class="l">Thu, 01 Dec 1994 16:00:00 GMT</span>
</span></span><span class="line"><span class="cl"><span class="n">Content-Language</span><span class="o">:</span> <span class="l">en-US</span>
</span></span><span class="line"><span class="cl"><span class="n">Set-Cookie</span><span class="o">:</span> <span class="l">JSESSIONID=0000Y4saPX4Aq_tCypur61bkzki:C4F1745366942536000007A8000098D000000000; Path=/</span>
</span></span><span class="line"><span class="cl"><span class="n">Content-Length</span><span class="o">:</span> <span class="l">226</span>
</span></span><span class="line"><span class="cl"><span class="n">Last-Modified</span><span class="o">:</span> <span class="l">Sat, 25 Feb 2012 20:58:40 GMT</span>
</span></span><span class="line"><span class="cl"><span class="n">Connection</span><span class="o">:</span> <span class="l">close</span>
</span></span><span class="line"><span class="cl"><span class="n">Content-Type</span><span class="o">:</span> <span class="l">text/xml;charset=UTF-8</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nt">&lt;response</span> <span class="na">code=</span><span class="s">&#34;X8005&#34;</span> <span class="na">label=</span><span class="s">&#34;Kontrollera dina uppgifter. Efter tre felaktiga kodförsök spärras koden. I Internettjänsten kan du byta din kod om den har blivit spärrad. Alternativt kan du kontakta närmaste bankkontor.&#34;</span><span class="nt">/&gt;</span>
</span></span></code></pre></div><p>Yea&hellip; well I don&rsquo;t have a SHB account (yet) so I couldn&rsquo;t get any further than this. I&rsquo;ll update this post with more information about the API when I get my login credentials from SHB.</p>
]]></content:encoded></item></channel></rss>