<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pentagrid AG (Einträge über Tools)</title><link>https://www.pentagrid.ch/</link><description></description><atom:link href="https://www.pentagrid.ch/de/categories/cat_tools.xml" rel="self" type="application/rss+xml"></atom:link><language>de</language><copyright>Contents © 2026 Pentagrid AG </copyright><lastBuildDate>Wed, 17 Jun 2026 19:14:54 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Parsing modern ASP.NET Core Identity password hashes to Hashcat</title><link>https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/</link><dc:creator>Yannic Hemmer, Pentagrid AG</dc:creator><description>&lt;p&gt;While this would not be anything out of the ordinary, the environment certainly was. So where do we expect ASP.NET Core Identity hashes? Some obscure cloud application, local Windows application, ... but surely not on an embedded linux system!?&lt;/p&gt;
&lt;p&gt;While the vulnerability itself was discovered at this point - exposing password hashes without any authentication is not exactly considered best practice - it was decided to investigate the password hashes further in an attempt to showcase password cracking and detect weak passwords.&lt;/p&gt;
&lt;p&gt;Despite numerous tools on the internet advertising the capability of converting ASP.NET Core Identity hashes into Hashcat format, all attempts at cracking the extracted password hashes remained unsuccessful despite knowing some pairs of plaintext passwords and ASP.NET Core Identity hashes.&lt;/p&gt;
&lt;p&gt;Why? It was time to dig in!&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;section id="no-country-for-old-hashes-cracking-asp-net-core-identity-with-hashcat"&gt;
&lt;h2&gt;No Country for Old Hashes: Cracking ASP.NET Core Identity with Hashcat&lt;/h2&gt;
&lt;p&gt;Before we look at why all of the current tools fail to correctly convert ASP.NET Core Identity hashes into Hashcat format, let us establish some background on the ASP.NET Core Identity Hashes.&lt;/p&gt;
&lt;section id="asp-net-core-identity-hashes"&gt;
&lt;h3&gt;ASP.NET Core Identity Hashes&lt;/h3&gt;
&lt;p&gt;Offical documentation from Microsoft on the structure is sparse. Luckily some amazing blog posts have been written by &lt;a class="reference external" href="https://www.strathweb.com/2023/03/beware-of-the-default-aspnet-identity-settings/"&gt;Filip W.&lt;/a&gt; and &lt;a class="reference external" href="https://www.blinkingcaret.com/2017/11/29/asp-net-identity-passwordhash/"&gt;Rui Figueiredo&lt;/a&gt;. To avoid regurgitating their entire works and opinions here, we are going to provide a brief overview of ASP.NET Core Identity password hashes:&lt;/p&gt;
&lt;p&gt;ASP.NET Core Identity hashes are base64-encoded byte structures split into multiple sets of magic length and values.&lt;/p&gt;
&lt;p&gt;The magic marker starts at the first byte, notated in the following as [0], called the format marker (mostly referred to as version) where we must differentiate between ASP.NET Core Identity v2 and v3 hashes.&lt;/p&gt;
&lt;p&gt;The old v2 hashes have a non-configurable structure: The format marker is followed by the salt [1,16] consisting of 16 bytes and the subkey [17,49] with 32 bytes. The key derivation PRF (pseudo-random function) is PBKDF2+HMAC-SHA1 with 1,000 iterations, taking the password and salt as input and producing the 32 bytes long subkey.&lt;/p&gt;
&lt;p&gt;With the introduction of ASP.NET Core Identity v3 hashes, the key derivation PRF, number of iterations, length of the salt, and length of the subkey can be customized. The PRF [1,4] can be chosen based on the &lt;code class="docutils literal"&gt;KeyDerivationPrf&lt;/code&gt; enum &lt;a class="brackets" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#footnote-1" id="footnote-reference-1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;3&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;: either HMACSHA1, HMACSHA256, or HMACSHA512.&lt;/p&gt;
&lt;p&gt;The number of iterations (ITER) [5,8] in combination with the chosen PRF defines the work factor.&lt;/p&gt;
&lt;p&gt;The length of the salt (SALTLEN) [9,12] is the input of a random number generator which generates the salt. The interval of the salt [13,(13+SALTLEN-1)] therefore depends on this length of the salt.&lt;/p&gt;
&lt;p&gt;After the salt, the actual subkey follows. The length of the subkey is not stored inside the ASP.NET Core Identity hash. Therefore, the only way to determine the length of the subkey is to read the byte structure until the end of the input [(13+SALTLEN-1), EOL]. Here, EOL represents the index of the last byte of the structure.&lt;/p&gt;
&lt;p&gt;Diving into the implementation in .NET, the &lt;code class="docutils literal"&gt;PasswordHasher&lt;/code&gt; class provides two methods of creating v3 hashes by overloading the HashPasswordV3 method &lt;a class="brackets" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#footnote-1" id="footnote-reference-2" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;3&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;. The first method is a convenience wrapper of the second using static magic values. Here, PRF is set to HMAC-SHA512 (HMAC-SHA256 for .NET versions &amp;lt;7.0), ITER to 100,000 (10,000 for .NET versions &amp;lt;7.0), and SALTLEN to 16. Additionally, 32 bytes are requested back from the PRF (length of the subkey). These values are most often referenced as "default values".&lt;/p&gt;
&lt;p&gt;The non-wrapped method allows unrestricted configuration of these values. There is no apparent limit on ITER, SALTLEN, and number of requested subkey bytes. Only the PRF is constrained by the enum &lt;code class="docutils literal"&gt;Microsoft.AspNetCore.Cryptography.KeyDerivation&lt;/code&gt; &lt;a class="brackets" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#footnote-2" id="footnote-reference-3" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;4&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While we did not encounter any example that deviates from these "default values", simply assuming static magic values when reading a v3 hash will result in incorrect handling for the "non-default" ASP.NET Core Identity v3 hashes.&lt;/p&gt;
&lt;p&gt;The following Listing shows the above described structure of ASP.NET Core Identity hashes:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-1" name="rest_code_83d02a5459b648be88244b36f7f60540-1" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-1"&gt;&lt;/a&gt;| [0] | ...
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-2" name="rest_code_83d02a5459b648be88244b36f7f60540-2" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-2"&gt;&lt;/a&gt;   |
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-3" name="rest_code_83d02a5459b648be88244b36f7f60540-3" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-3"&gt;&lt;/a&gt;   '--&amp;gt; 0x00 ASP.NET Core Identity hashing logic version v2
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-4" name="rest_code_83d02a5459b648be88244b36f7f60540-4" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-4"&gt;&lt;/a&gt;   |    | [0]  | [1,16] | [17,49] |
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-5" name="rest_code_83d02a5459b648be88244b36f7f60540-5" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-5"&gt;&lt;/a&gt;   |    | 0x00 | SALT   | SUBKEY  |
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-6" name="rest_code_83d02a5459b648be88244b36f7f60540-6" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-6"&gt;&lt;/a&gt;   |
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-7" name="rest_code_83d02a5459b648be88244b36f7f60540-7" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-7"&gt;&lt;/a&gt;   '--&amp;gt; 0x01 ASP.NET Core Identity hashing logic version v3
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-8" name="rest_code_83d02a5459b648be88244b36f7f60540-8" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-8"&gt;&lt;/a&gt;        | [0]  | [1,4] | [5,8] | [9,12]  | [13,(13+SALTLEN-1)] | [(13+SALTLEN),EOL] |
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-9" name="rest_code_83d02a5459b648be88244b36f7f60540-9" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-9"&gt;&lt;/a&gt;        | 0x01 | PRF   | ITER  | SALTLEN | SALT                | SUBKEY             |
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-10" name="rest_code_83d02a5459b648be88244b36f7f60540-10" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-10"&gt;&lt;/a&gt;                   |       |
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-11" name="rest_code_83d02a5459b648be88244b36f7f60540-11" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-11"&gt;&lt;/a&gt;                   |       ' --&amp;gt;  10,000 (HMAC-SHA256 .NET &amp;lt; 7.0 default)
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-12" name="rest_code_83d02a5459b648be88244b36f7f60540-12" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-12"&gt;&lt;/a&gt;                   |       ' --&amp;gt; 100,000 (HMAC-SHA512 .NET &amp;gt;= 7.0 default)
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-13" name="rest_code_83d02a5459b648be88244b36f7f60540-13" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-13"&gt;&lt;/a&gt;                   |
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-14" name="rest_code_83d02a5459b648be88244b36f7f60540-14" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-14"&gt;&lt;/a&gt;                   ' --&amp;gt; 0x00 HMAC-SHA1
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-15" name="rest_code_83d02a5459b648be88244b36f7f60540-15" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-15"&gt;&lt;/a&gt;                   ' --&amp;gt; 0x01 HMAC-SHA256
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-16" name="rest_code_83d02a5459b648be88244b36f7f60540-16" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-16"&gt;&lt;/a&gt;                   ' --&amp;gt; 0x02 HMAC-SHA512
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-17" name="rest_code_83d02a5459b648be88244b36f7f60540-17" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-17"&gt;&lt;/a&gt;   ASP.NET_IDENTITY_HASH_...
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-18" name="rest_code_83d02a5459b648be88244b36f7f60540-18" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-18"&gt;&lt;/a&gt;       SALT (32 bytes)    --&amp;gt; Password salt used in PBKDF2+HMAC-SHA{1,256,512} function
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-19" name="rest_code_83d02a5459b648be88244b36f7f60540-19" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-19"&gt;&lt;/a&gt;       SUBKEY (32 bytes)  --&amp;gt; Result of PBKDF2+HMAC-SHA{1,256,512}
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-20" name="rest_code_83d02a5459b648be88244b36f7f60540-20" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-20"&gt;&lt;/a&gt;
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-21" name="rest_code_83d02a5459b648be88244b36f7f60540-21" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-21"&gt;&lt;/a&gt;       (only v2 -- method HashPasswordV2 in [#1]_)
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-22" name="rest_code_83d02a5459b648be88244b36f7f60540-22" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-22"&gt;&lt;/a&gt;       Number of iterations: 1,000 (static)
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-23" name="rest_code_83d02a5459b648be88244b36f7f60540-23" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-23"&gt;&lt;/a&gt;       Length of the salt: 16 bytes (static)
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-24" name="rest_code_83d02a5459b648be88244b36f7f60540-24" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-24"&gt;&lt;/a&gt;       Length of the subkey: 32 bytes (static)
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-25" name="rest_code_83d02a5459b648be88244b36f7f60540-25" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-25"&gt;&lt;/a&gt;
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-26" name="rest_code_83d02a5459b648be88244b36f7f60540-26" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-26"&gt;&lt;/a&gt;       (only v3 -- method HashPasswordV3 in [#1]_)
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-27" name="rest_code_83d02a5459b648be88244b36f7f60540-27" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-27"&gt;&lt;/a&gt;       PRF  (uint32BE)    --&amp;gt; Pseudo-random function used for key derivation (see [#2]_)
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-28" name="rest_code_83d02a5459b648be88244b36f7f60540-28" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-28"&gt;&lt;/a&gt;       ITER (uint32BE)    --&amp;gt; Number of iterations the hashing algorithm is applied
&lt;a id="rest_code_83d02a5459b648be88244b36f7f60540-29" name="rest_code_83d02a5459b648be88244b36f7f60540-29" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_83d02a5459b648be88244b36f7f60540-29"&gt;&lt;/a&gt;       SALTLEN (uint32BE) --&amp;gt; Length of the salt (saltSize)
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="asp-net-core-idenity-hash-to-hashcat-format-convertion"&gt;
&lt;h3&gt;ASP.NET Core Idenity Hash to Hashcat Format Convertion&lt;/h3&gt;
&lt;p&gt;To generate valid Hashcat format from ASP.NET Core Identity hashes, the PRF, number of iterations, salt, and subkey must be brought into the following structure:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_fb6b7a77c901439f9173e6123cc4943d-1" name="rest_code_fb6b7a77c901439f9173e6123cc4943d-1" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_fb6b7a77c901439f9173e6123cc4943d-1"&gt;&lt;/a&gt;&amp;lt;PRF&amp;gt;:&amp;lt;ITER&amp;gt;:&amp;lt;base64enc(SALT)&amp;gt;:&amp;lt;base64enc(SUBKEY)&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let us do this process for the following ASP.NET Core Identity password hash:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_18e67489201149918fb9e900b26db2df-1" name="rest_code_18e67489201149918fb9e900b26db2df-1" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_18e67489201149918fb9e900b26db2df-1"&gt;&lt;/a&gt;AQAAAAIAAYagAAAAEPcrvDihsovZNHxRFrv1y3i4qfjKsXn+JzKD7AOIlxe5YSb/s+tMXJVQeU1//VQXow==
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Base64-decoded and structured:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_80d8fa6a4d53402399d580a24fc9d4b0-1" name="rest_code_80d8fa6a4d53402399d580a24fc9d4b0-1" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_80d8fa6a4d53402399d580a24fc9d4b0-1"&gt;&lt;/a&gt;01 := (0x) ASP.NET Core Identity v3 hash
&lt;a id="rest_code_80d8fa6a4d53402399d580a24fc9d4b0-2" name="rest_code_80d8fa6a4d53402399d580a24fc9d4b0-2" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_80d8fa6a4d53402399d580a24fc9d4b0-2"&gt;&lt;/a&gt;00000002 := (0x) HMAC-SHA512
&lt;a id="rest_code_80d8fa6a4d53402399d580a24fc9d4b0-3" name="rest_code_80d8fa6a4d53402399d580a24fc9d4b0-3" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_80d8fa6a4d53402399d580a24fc9d4b0-3"&gt;&lt;/a&gt;000186a0 := (0x) 0d100,000 iterations
&lt;a id="rest_code_80d8fa6a4d53402399d580a24fc9d4b0-4" name="rest_code_80d8fa6a4d53402399d580a24fc9d4b0-4" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_80d8fa6a4d53402399d580a24fc9d4b0-4"&gt;&lt;/a&gt;f7 2b bc 38 a1 b2 8b d9 34 7c 51 16 bb f5 cb 78 := salt
&lt;a id="rest_code_80d8fa6a4d53402399d580a24fc9d4b0-5" name="rest_code_80d8fa6a4d53402399d580a24fc9d4b0-5" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_80d8fa6a4d53402399d580a24fc9d4b0-5"&gt;&lt;/a&gt;b8 a9 f8 ca b1 79 fe 27 32 83 ec 03 88 97 17 b9 61 26 ff b3 eb 4c 5c 95 50 79 4d 7f fd 54 17 a3 := subkey
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ASP.NET Core Identity v3 hash PRF, iterations, salt, and subkey converted to Hashcat format:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_1c5fb680a7bc4031afde73f41c6003ca-1" name="rest_code_1c5fb680a7bc4031afde73f41c6003ca-1" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#rest_code_1c5fb680a7bc4031afde73f41c6003ca-1"&gt;&lt;/a&gt;sha512:100000:9yu8OKGyi9k0fFEWu/XLeA==:uKn4yrF5/icyg+wDiJcXuWEm/7PrTFyVUHlNf/1UF6M=
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When attempting to break the ASP.NET Core Identity hashes with Hashcat, we need to ensure that Hashcat correctly identifies the hash type or set it manually with the &lt;a class="reference external" href="https://hashcat.net/wiki/doku.php?id=example_hashes"&gt;hash-mode&lt;/a&gt; (aka &lt;a class="reference external" href="https://hashcat.net/wiki/doku.php?id=hashcat"&gt;hash-type&lt;/a&gt;). This also means that we need to use multiple Hashcat runs when encountering differing PRFs. Ideally, the hashes with differing PRFs are split into multiple files.&lt;/p&gt;
&lt;table class="align-center" style="width: 55%;"&gt;
&lt;caption&gt;Table showing the different hash types per ASP.NET version/format marker and .NET versions, as well as the corresponding Hashcat hash-mode (&lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;-m&lt;/span&gt;&lt;/code&gt; parameter).&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th class="head"&gt;&lt;p&gt;ASP.NET version&lt;/p&gt;&lt;/th&gt;
&lt;th class="head"&gt;&lt;p&gt;Hash type&lt;/p&gt;&lt;/th&gt;
&lt;th class="head"&gt;&lt;p&gt;Hashcat hash-mode&lt;/p&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;p&gt;v2, v3&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;PBKDF2+HMAC-SHA1&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;12000&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;p&gt;v3&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;PBKDF2+HMAC-SHA256&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;10900&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;p&gt;v3 (.NET &amp;gt; 7.0)&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;PBKDF2+HMAC-SHA512&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;12100&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/section&gt;
&lt;section id="current-tooling"&gt;
&lt;h3&gt;Current Tooling&lt;/h3&gt;
&lt;p&gt;From what we have seen so far, the process of converting ASP.NET Core Identity hashes seems a bit convoluted due to their magic structure, but otherwise relatively straightforward.&lt;/p&gt;
&lt;p&gt;So what occurred during initial attempts of converting the hash with one of the available tools? The tried tools being:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/edernucci/identity-to-hashcat.git"&gt;identity-to-hashcat&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/brunobritodev/Hashcat.ASPNET.Identity.git"&gt;ASP.NET Identity - Hashcat&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Yeeb1/ASP.NETIdentity2hashcat.git"&gt;ASP.NETIdentity2hashcat&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;ASP.NETIdentity2hashcat&lt;/em&gt; and &lt;em&gt;identity-to-hashcat&lt;/em&gt; both lack the support for ASP.NET Core Identity v3 hashes from .NET versions 7.0 or higher. Instead, they wrongfully default to a statically set SHA256 as the PRF.&lt;/p&gt;
&lt;p&gt;Further, &lt;em&gt;ASP.NETIdentity2hashcat&lt;/em&gt; uses the wrong byte interval for the number of iterations, returning the encoded PRF enum instead.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ASP.NET Identity&lt;/em&gt; seems to use a more solid approach by using the &lt;code class="docutils literal"&gt;AspNetIdentityHashInfo&lt;/code&gt; class from the &lt;code class="docutils literal"&gt;NetDevPack.Utilities&lt;/code&gt; namespace instead of using their own implementation. Yet similarly, this falls short of .NET version 7.0 and higher compatibility. In this case it was necessary to dig deeper to find out why the resulting Hashcat hashes cannot be broken. The answer lies in the &lt;a class="reference external" href="https://github.com/NetDevPack/NetDevPack/blob/b3106b87ff617dd00b644ab385e3165a09ee518f/src/NetDevPack/Utilities/AspNetIdentityHashInfo.cs"&gt;NetDevPack&lt;/a&gt; repo on commit b3106b8. Therefore, all three tools do not handle configured ASP.NET Core Identity v3 hashes: Only SHA256 support as well as the &lt;em&gt;default values&lt;/em&gt; for the length of the salt and length of subkey are statically assumed as 16 and 32 bytes respectively.&lt;/p&gt;
&lt;p&gt;Instead of displaying any warnings or errors, the tools report back false PRFs, salts, and subkeys.&lt;/p&gt;
&lt;p&gt;TL;DR. The tested tools lack support for the PRF HMAC-SHA512 which was introduced with .NET version 7.0 (which was released in 2022). We need a tool that supports all currently supported ASP.NET Core Identity hashes and .NET versions.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="contributions"&gt;
&lt;h3&gt;Contributions&lt;/h3&gt;
&lt;p&gt;Instead of extending one of the existing tools, a ground-up approach was taken to reach the following goals:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clear type system&lt;/strong&gt; for the structured components of ASP.NET Core Identity hashes. Errors are thrown if parsed content does not fit type system. Type system can be extended for future .NET releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;dl class="simple"&gt;
&lt;dt&gt;&lt;strong&gt;Input of ASP.NET Core Identity hashes:&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Capability to parse large numbers of ASP.NET Core Identity hashes at once. This allows us to parse entire excerpts of real-world ASP.NET Core Identity databases which may hold hundreds of user entries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow annotations of the hashes which can be used for usernames, suspected passwords, or other remarks.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;&lt;dl class="simple"&gt;
&lt;dt&gt;&lt;strong&gt;Output of Hashcat formatted hashes:&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Structured output split by PRF due to Hashcat expecting only a single hash type in its input file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Annotations from input file can be prepended to the formatted hashes for compatibility with the Hashcat &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;--username&lt;/span&gt;&lt;/code&gt; option.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Documentation on the ASP.NET Core Identity&lt;/strong&gt; structure, conversion process, and supported versions/PRFs. At time of writing v2 and v3 (PBKDF2+HMAC-SHA{1,256,512}) with default or custom configuration hashes are supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test cases for all "default variants"&lt;/strong&gt; of ASP.NET Core Identity hashes to confirm proper conversion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Verbose output options&lt;/strong&gt; to allow debugging.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The conversion script is hosted at &lt;a class="reference external" href="https://codeberg.org/pentagridsec/convertASPdotNETIdentityHash2hashcatFormat"&gt;Codeberg&lt;/a&gt; and at &lt;a class="reference external" href="https://github.com/pentagridsec/convertASPdotNETIdentityHash2hashcatFormat"&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="recommendation-for-asp-net-core-identity-production-use"&gt;
&lt;h3&gt;Recommendation for ASP.NET Core Identity Production Use&lt;/h3&gt;
&lt;p&gt;If you are using ASP.NET Core Identity hashes for authentication, we strongly recommend reviewing the work effort of all stored hashes. OWASP publishes and continuously updates their recommendations for the &lt;a class="reference external" href="https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html#pbkdf2"&gt;work effort of PBKDF2&lt;/a&gt;. The .NET "defaults" do not meet these recommendations at all:&lt;/p&gt;
&lt;table class="align-center" style="width: 55%;"&gt;
&lt;caption&gt;Table showing the number of iterations over different key derivation/hashing algorithms used as .NET "defaults", which represents the work effort, compared to the OWASP recommendations as of 2026-06-01.&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th class="head"&gt;&lt;p&gt;Key derivation and hash&lt;/p&gt;&lt;/th&gt;
&lt;th class="head"&gt;&lt;p&gt;.NET "defaults"&lt;/p&gt;&lt;/th&gt;
&lt;th class="head"&gt;&lt;p&gt;OWASP recommendations&lt;/p&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;p&gt;PBKDF2+HMAC-SHA1&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;1,000&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;1,400,000 iterations&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;p&gt;PBKDF2+HMAC-SHA256&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;10,000&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;600,000 iterations&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;p&gt;PBKDF2+HMAC-SHA512&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;100,000&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;220,000 iterations&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;To the best of our knowledge, newly created "default" ASP.NET Core Identity v3 hashes for &lt;a class="reference external" href="https://github.com/dotnet/AspNetCore/blob/main/src/Identity/Extensions.Core/src/PasswordHasher.cs"&gt;.NET version 7.0+&lt;/a&gt; use PBKDF2-HMAC-SHA512 which only lags behind the OWASP recommendations by a factor of two.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/aspnet/Identity/blob/master/src/Core/PasswordHasher.cs"&gt;.NET versions below 7.0&lt;/a&gt; ASP.NET Core Identity v3 "default" hashes use PBKDF2-HMAC-SHA256 with work effort an order of magnitude lower than recommended by OWASP.&lt;/p&gt;
&lt;p&gt;Regardless of the .NET version: If ASP.NET Core Identity v2 hashes are generated, PBKDF2-HMAC-SHA1 with 1,000 iterations will always be used. This is multiple magnitudes below current OWASP recommendations. It cannot be customized. This poses direct risk by allowing attackers to break hashed and salted passwords without major computational and time effort. Therefore, v2 hashes are always a bad sign.&lt;/p&gt;
&lt;p&gt;Perhaps it would be a good time for Microsoft to set their own standards or mandate those of others, rather than &lt;a class="reference external" href="https://learn.microsoft.com/en-us/security/engineering/cryptographic-recommendations#key-derivation-functions"&gt;passing the buck down&lt;/a&gt; to developers and customers.&lt;/p&gt;
&lt;aside class="footnote-list brackets"&gt;
&lt;aside class="footnote brackets" id="footnote-1" role="doc-footnote"&gt;
&lt;span class="label"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;3&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class="backrefs"&gt;(&lt;a role="doc-backlink" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#footnote-reference-1"&gt;1&lt;/a&gt;,&lt;a role="doc-backlink" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#footnote-reference-2"&gt;2&lt;/a&gt;)&lt;/span&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/dotnet/aspnetcore/blob/c0c2230799a3f876aa673a66bc008bf9b803acac/src/Identity/Extensions.Core/src/PasswordHasher.cs"&gt;Source file PasswordHasher.cs in ASP.NET Core&lt;/a&gt;&lt;/p&gt;
&lt;/aside&gt;
&lt;aside class="footnote brackets" id="footnote-2" role="doc-footnote"&gt;
&lt;span class="label"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;&lt;a role="doc-backlink" href="https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/#footnote-reference-3"&gt;4&lt;/a&gt;&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;a class="reference external" href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.cryptography.keyderivation.keyderivationprf?view=aspnetcore-10.0"&gt;API ASP.NET Core KeyDerivationPrf Enum&lt;/a&gt;&lt;/p&gt;
&lt;/aside&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;/section&gt;</description><guid>https://www.pentagrid.ch/de/blog/parsing-modern-aspnet-core-identity-password-hashes-to-hashcat/</guid><pubDate>Wed, 03 Jun 2026 09:23:00 GMT</pubDate></item><item><title>ISO 20022, Pain001 and payment of your salary</title><link>https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/</link><dc:creator>Pentagrid AG</dc:creator><description>&lt;p&gt;At Pentagrid, we occasionally review our clients' internal processes to identify IT security risks. When we discovered that large sums of money are transferred with just a few clicks and no transaction verification, we helped securing the process. At the same time, we developed a tool to support this improvement.&lt;/p&gt;
&lt;p&gt;The following blog post outlines the complexity of pain.001 files, the risk of transfering payment files via insecure channels and the problem of reviewing payment details when the pain.001 file is uploaded into an e-banking interface. Pentagrid's tool follows a diff-like approach to detect changes among monthly payments. The &lt;a class="reference external" href="https://github.com/pentagridsec/riskless-pain"&gt;"riskless pain" tool is available on Github&lt;/a&gt;.&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;section id="introduction-to-iso-20022-pain-001-and-salary-payments"&gt;
&lt;h2&gt;Introduction to ISO 20022, pain.001 and salary payments&lt;/h2&gt;
&lt;p&gt;If you get paid a salary, it is likely that the payment will be transfered to the bank as part of a pain.001 file. In national and international banking, there is a common (and machine-readable) way of talking about such bank payments and other transactions. &lt;a class="reference external" href="https://en.wikipedia.org/wiki/ISO_20022"&gt;ISO 20022&lt;/a&gt; defines this "standard for electronic data interchange". One part of it is &lt;cite&gt;Customer Credit Transfer Initiation (pain.001)&lt;/cite&gt;. As the name implies, it is used when a bank customer (e.g. a company) would like to instruct the bank to make payments. In essence, it is a standardised XML message saying something like &lt;cite&gt;Please use my account with IBAN CH9999999910378969399 to pay CHF 500.00 to Bob Foo, Zurich with IBAN LI7008805599999999999&lt;/cite&gt;.&lt;/p&gt;
&lt;p&gt;The pain.001 format supports thousand of payments in one single file. It also accommodates a wide range of special cases, including intermediary banks and cheques, which leads to complexity. This complexity is the first challenge: While verifying a pain.001 file against its XML schema is straightforward, ensuring that it matches the human intent behind the payment is not. The complexity increases when supporting all the various formats and versions. There are old formats/specifications and new ones (versions) as well as country-specific specifications. Especially the old specifications include questionable design decisions. For instance, the old Swiss format uses the &lt;cite&gt;&amp;lt;BIC&amp;gt;&lt;/cite&gt; tag to represent a bank's clearing number, while newer international formats use &lt;cite&gt;&amp;lt;BICFI&amp;gt;&lt;/cite&gt; for the actual Bank Identifier Code. Add to this the many optional fields, and it becomes easy to generate a technically valid but semantically dubious pain.001 file.&lt;/p&gt;
&lt;p&gt;Let's look at an example of &lt;cite&gt;Please use my account with IBAN CH9999999910378969399 to pay CHF 500.00 to Bob Foo, Zurich with IBAN LI7008805599999999999&lt;/cite&gt;. The follwing XML file is in the new Swiss format &lt;cite&gt;pain.001.001.09.ch.03&lt;/cite&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code xml"&gt;&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-1" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-1" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-1"&gt;&lt;/a&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-2" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-2" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-2"&gt;&lt;/a&gt;&lt;span class="nt"&gt;&amp;lt;Document&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-3" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-3" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;"urn:iso:std:iso:20022:tech:xsd:pain.001.001.09"&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-4" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-4" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="na"&gt;xmlns:xsi=&lt;/span&gt;&lt;span class="s"&gt;"http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;xsi:schemaLocation=&lt;/span&gt;&lt;span class="s"&gt;"urn:iso:std:iso:20022:tech:xsd:pain.001.001.09 pain.001.001.09.ch.03.xsd"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-5" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-5" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;CstmrCdtTrfInitn&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-6" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-6" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;GrpHdr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-7" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-7" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;MsgId&amp;gt;&lt;/span&gt;MSG-2025-05-21T13:44:43&lt;span class="nt"&gt;&amp;lt;/MsgId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-8" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-8" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;CreDtTm&amp;gt;&lt;/span&gt;2025-05-21T13:44:43&lt;span class="nt"&gt;&amp;lt;/CreDtTm&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-9" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-9" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;NbOfTxs&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/NbOfTxs&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-10" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-10" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;CtrlSum&amp;gt;&lt;/span&gt;500.0&lt;span class="nt"&gt;&amp;lt;/CtrlSum&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-11" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-11" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;InitgPty&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-12" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-12" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Nm&amp;gt;&lt;/span&gt;Example&lt;span class="w"&gt; &lt;/span&gt;AG&lt;span class="nt"&gt;&amp;lt;/Nm&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-13" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-13" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;CtctDtls&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-14" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-14" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Othr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-15" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-15" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ChanlTp&amp;gt;&lt;/span&gt;NAME&lt;span class="nt"&gt;&amp;lt;/ChanlTp&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-16" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-16" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Id&amp;gt;&lt;/span&gt;Infoniqa&lt;span class="w"&gt; &lt;/span&gt;ONE&lt;span class="w"&gt; &lt;/span&gt;Start&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Id&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-17" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-17" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Othr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-18" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-18" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Othr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-19" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-19" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ChanlTp&amp;gt;&lt;/span&gt;VRSN&lt;span class="nt"&gt;&amp;lt;/ChanlTp&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-20" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-20" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Id&amp;gt;&lt;/span&gt;V-2025.00)&lt;span class="nt"&gt;&amp;lt;/Id&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-21" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-21" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Othr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-22" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-22" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-22"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Othr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-23" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-23" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-23"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ChanlTp&amp;gt;&lt;/span&gt;PRVD&lt;span class="nt"&gt;&amp;lt;/ChanlTp&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-24" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-24" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Id&amp;gt;&lt;/span&gt;Infoniqa&lt;span class="w"&gt; &lt;/span&gt;Schweiz&lt;span class="w"&gt; &lt;/span&gt;AG&lt;span class="nt"&gt;&amp;lt;/Id&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-25" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-25" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Othr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-26" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-26" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Othr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-27" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-27" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ChanlTp&amp;gt;&lt;/span&gt;SPSV&lt;span class="nt"&gt;&amp;lt;/ChanlTp&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-28" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-28" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-28"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Id&amp;gt;&lt;/span&gt;2.0&lt;span class="nt"&gt;&amp;lt;/Id&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-29" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-29" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-29"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Othr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-30" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-30" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-30"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/CtctDtls&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-31" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-31" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-31"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/InitgPty&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-32" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-32" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-32"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/GrpHdr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-33" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-33" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-33"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;PmtInf&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-34" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-34" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-34"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;PmtInfId&amp;gt;&lt;/span&gt;PMTINF-2025-05-21T13:44:43-1&lt;span class="nt"&gt;&amp;lt;/PmtInfId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-35" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-35" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-35"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;PmtMtd&amp;gt;&lt;/span&gt;TRF&lt;span class="nt"&gt;&amp;lt;/PmtMtd&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-36" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-36" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-36"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;BtchBookg&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/BtchBookg&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-37" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-37" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-37"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;PmtTpInf&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-38" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-38" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-38"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;CtgyPurp&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-39" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-39" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-39"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Cd&amp;gt;&lt;/span&gt;SALA&lt;span class="nt"&gt;&amp;lt;/Cd&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-40" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-40" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-40"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/CtgyPurp&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-41" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-41" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-41"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/PmtTpInf&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-42" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-42" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-42"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ReqdExctnDt&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-43" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-43" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-43"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Dt&amp;gt;&lt;/span&gt;2025-05-26&lt;span class="nt"&gt;&amp;lt;/Dt&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-44" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-44" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-44"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/ReqdExctnDt&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-45" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-45" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-45"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Dbtr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-46" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-46" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-46"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Nm&amp;gt;&lt;/span&gt;Example&lt;span class="w"&gt; &lt;/span&gt;AG&lt;span class="nt"&gt;&amp;lt;/Nm&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-47" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-47" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-47"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Dbtr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-48" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-48" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-48"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;DbtrAcct&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-49" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-49" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-49"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Id&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-50" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-50" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-50"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IBAN&amp;gt;&lt;/span&gt;CH9999999910378969399&lt;span class="nt"&gt;&amp;lt;/IBAN&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-51" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-51" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-51"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Id&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-52" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-52" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-52"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Tp&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-53" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-53" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-53"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Prtry&amp;gt;&lt;/span&gt;CND&lt;span class="nt"&gt;&amp;lt;/Prtry&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-54" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-54" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-54"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Tp&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-55" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-55" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-55"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/DbtrAcct&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-56" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-56" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-56"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;DbtrAgt&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-57" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-57" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-57"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;FinInstnId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-58" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-58" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-58"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ClrSysMmbId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-59" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-59" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-59"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ClrSysId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-60" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-60" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-60"&gt;&lt;/a&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Cd&amp;gt;&lt;/span&gt;CHBCC&lt;span class="nt"&gt;&amp;lt;/Cd&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-61" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-61" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-61"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/ClrSysId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-62" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-62" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-62"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;MmbId&amp;gt;&lt;/span&gt;774&lt;span class="nt"&gt;&amp;lt;/MmbId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-63" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-63" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-63"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/ClrSysMmbId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-64" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-64" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-64"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/FinInstnId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-65" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-65" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-65"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/DbtrAgt&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-66" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-66" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-66"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;CdtTrfTxInf&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-67" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-67" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-67"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;PmtId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-68" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-68" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-68"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;InstrId&amp;gt;&lt;/span&gt;287&lt;span class="nt"&gt;&amp;lt;/InstrId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-69" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-69" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-69"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;EndToEndId&amp;gt;&lt;/span&gt;001283545D024C86401A11A21A2B12CF&lt;span class="nt"&gt;&amp;lt;/EndToEndId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-70" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-70" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-70"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/PmtId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-71" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-71" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-71"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Amt&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-72" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-72" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-72"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;InstdAmt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;Ccy=&lt;/span&gt;&lt;span class="s"&gt;"CHF"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;500.00&lt;span class="nt"&gt;&amp;lt;/InstdAmt&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-73" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-73" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-73"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Amt&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-74" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-74" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-74"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;CdtrAgt&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-75" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-75" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-75"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;FinInstnId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-76" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-76" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-76"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;BICFI&amp;gt;&lt;/span&gt;LILALI2XXXX&lt;span class="nt"&gt;&amp;lt;/BICFI&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-77" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-77" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-77"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/FinInstnId&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-78" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-78" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-78"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/CdtrAgt&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-79" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-79" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-79"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Cdtr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-80" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-80" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-80"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Nm&amp;gt;&lt;/span&gt;Bob&lt;span class="w"&gt; &lt;/span&gt;Foo&lt;span class="nt"&gt;&amp;lt;/Nm&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-81" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-81" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-81"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;PstlAdr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-82" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-82" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-82"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;StrtNm&amp;gt;&lt;/span&gt;Foo&lt;span class="w"&gt; &lt;/span&gt;13&lt;span class="nt"&gt;&amp;lt;/StrtNm&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-83" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-83" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-83"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;PstCd&amp;gt;&lt;/span&gt;8400&lt;span class="nt"&gt;&amp;lt;/PstCd&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-84" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-84" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-84"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;TwnNm&amp;gt;&lt;/span&gt;Zurich&lt;span class="nt"&gt;&amp;lt;/TwnNm&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-85" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-85" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-85"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Ctry&amp;gt;&lt;/span&gt;CH&lt;span class="nt"&gt;&amp;lt;/Ctry&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-86" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-86" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-86"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/PstlAdr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-87" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-87" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-87"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Cdtr&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-88" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-88" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-88"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;CdtrAcct&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-89" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-89" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-89"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Id&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-90" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-90" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-90"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IBAN&amp;gt;&lt;/span&gt;LI7008805599999999999&lt;span class="nt"&gt;&amp;lt;/IBAN&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-91" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-91" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-91"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Id&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-92" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-92" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-92"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/CdtrAcct&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-93" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-93" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-93"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;RmtInf/&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-94" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-94" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-94"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/CdtTrfTxInf&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-95" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-95" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-95"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/PmtInf&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-96" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-96" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-96"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/CstmrCdtTrfInitn&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-97" name="rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-97" href="https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/#rest_code_1f1f6855b5ac4674980fbfd41f7e88fa-97"&gt;&lt;/a&gt;&lt;span class="nt"&gt;&amp;lt;/Document&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Some of the complexity we encounter in these files may be intentional and necessary for certain use cases. However, from our perspective, it also introduces potential issues. For instance, while the pain.001 file explicitly specifies the recipient's bank using a BIC (e.g., &lt;cite&gt;LILALI2XXXX&lt;/cite&gt;), the IBAN itself also encodes a bank identifier (in this case, the &lt;cite&gt;LI7008&lt;/cite&gt; prefix). So what happens if the bank indicated by the IBAN doesn't match the one specified in the BIC? Which one takes precedence? This scenario is likely addressed somewhere in the ISO 20022 specification. But it's easy to get wrong in practice. We suspect there are financial systems out there that mishandle such discrepancies.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="trust-or-how-the-file-reaches-the-bank"&gt;
&lt;h2&gt;Trust or how the file reaches the bank&lt;/h2&gt;
&lt;p&gt;Obviously, if you instruct your bank to do a payment with an attacker-controlled pain001 file, this is bad news and your money (which was supposed to be your employee's salaries) is gone.&lt;/p&gt;
&lt;p&gt;You might say that an untrusted pain001 file should never reach the bank and you are absolutely right. In theory, you should trust whatever creates such files, such as your book keeping software (e.g. Infoniqa, SAGE, Bexio, Abacus just to name a few here in Switzerland). But how does the XML file from your software reach the bank?&lt;/p&gt;
&lt;p&gt;One option (at least here in Switzerland) is to transfer the pain001 file directly from the book keeping software to the bank via EBICS. EBICS is again a different standard, an XML protocol used to login to the bank account and then send the pain001 file (yes, XML in XML). The protocol can be used to do a lot of other things, too. EBICS has it's own complexity we don't want to look at today (e.g. your book keeping software has access to your bank account) but at least nowadays if configured correctly this should use TLS and in-protocol mutual public key authentication (yes, not mutual TLS usually). We've tested many EBICS systems before and you can &lt;a class="reference external" href="https://www.pentagrid.ch/en/blog/reflected-xss-vulnerability-in-crealogix-ebics-implementation/"&gt;read about an XSS vulnerability here,&lt;/a&gt; but for the scope of this article, EBICS is good from a trust perspective. The pain001 reaches the bank directly over a secure channel.&lt;/p&gt;
&lt;p&gt;Another option is to generate the file in the software directly and then the same person uploads the file to the bank. This is usually fine, too.&lt;/p&gt;
&lt;p&gt;However, in practice pain001 files are also exported from book keeping software and kept as files. Many companies use external book keeping services or payroll contractors, which then transfer the pain001 file to the customer to do the actual payment in the electronic banking portal. Unfortunately, often enough the files are sent via email or other untrusted channels. As standard email is unauthenticated, this means the recipient needs to verify the contents of the pain001 file before doing the payment. And this is where it gets tricky. We've seen multiple Chief Financial Officers (CFO) of companies receiving pain001 files for salary payment and sending millions of swiss francs without verifing the contents of the pain001 file, doing this every single month of the year. Imagine one spoofed email that sends a pain001 file one day early before the regular salary payments are due... and there could be immediate financial damage.&lt;/p&gt;
&lt;p&gt;The most important and obvious thing to do is to secure the channel first and use something secure rather than email. This is what we recommend to do first. But then you might still wonder what kind of payments are included in the pain001 file you get: Control is better than trust. And honestly, investing a minute to check the file before you send a couple of million swiss francs looks like a good trade-off.&lt;/p&gt;
&lt;p&gt;This leads to the next problem in the chain: E-Banking interfaces of banks. It is very unfortunate that many banks do not handle pain001 files in a user friendly way (although we heard at least from one bank doing it right in Switzerland). When uploading the file, most banks check the integrity of the file, but then only show the total amount and the number of transactions, but no list of transactions. This means it is still not possible to know which recipient or which bank will get the money. And in many cases the "independent payment verification" on the mobile phone will only show the same data instead of the list of transactions. Even the four-eyes principle with joint signatories doesn't help in this case if all four eyes don't see any transaction details.&lt;/p&gt;
&lt;p&gt;As usual there are multiple things that usually have to be wrong, but we saw the problem in practice.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="riskless-pain-tool-and-salary-use-case"&gt;
&lt;h2&gt;Riskless pain tool and salary use case&lt;/h2&gt;
&lt;p&gt;For the simple case of reoccuring monthly salary payments where a lot of the transactions stay the same month after month, we created a tool to look at a pain001 file or compare two pain001 files. Our goal was to show where money is going to end up, therefore we parse all &lt;cite&gt;CdtTrfTxInf&lt;/cite&gt; tags from a pain001 file, but don't care about the rest. E.g. we don't care about from which account the money is paid from. With the creation of our tool the complexity of pain001 started to show. Due to all the optional fields that are possible which might reroute a payment to a malicious actor, it is hard for a GUI tool to show all the data that could be represented. We went for a pragmatic approach which shows the most common fields. But to be on the secure side we can also display the XML tree (&lt;cite&gt;CdtTrfTxInf&lt;/cite&gt;). The tool will also try to match similar payments of two pain001 files are compared, so modifications can be detected and a diff-style difference between the payment XML tree can be displayed in the GUI.&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://www.pentagrid.ch/images/202511_pain001_tutorial.gif"&gt;
&lt;img alt="Riskless pain tool loading a pain001 file and then another to show the differences." class="align-center" src="https://www.pentagrid.ch/images/202511_pain001_tutorial.thumbnail.gif"&gt;
&lt;/a&gt;
&lt;p&gt;We hope the &lt;a class="reference external" href="https://github.com/pentagridsec/riskless-pain"&gt;"riskless pain" tool&lt;/a&gt; is helpful to all people who would like to show details of pain.001.001 files. However, there is absolutely no warranty whatsoever, because simply put, pain001 files are pretty complex. We assume that when looking at all &lt;cite&gt;CdtTrfTxInf&lt;/cite&gt; XML tag you should know to whom you send money, but this assumption could be wrong. However, we support version pain.001.001.01 all the way up to pain.001.001.11.xsd and also the Swiss standard. We're pretty sure the tool will fail for other national standards that are not compatible with the ISO20022 international XML schemes. We also have only tested the tool with a couple of XML test files that are again only a selection from a handful of XML schemas out of the many supported ones. We did not look through each and every version to make sure that looking at &lt;cite&gt;CdtTrfTxInf&lt;/cite&gt; tags in the XML files is sufficient. We haven't even read the ISO2022 standard. So please take this with a grain of salt and let us know if you find a way to transfer money to an attacker without the GUI warning of a modification (or showing any details in the XML tab).&lt;/p&gt;
&lt;p&gt;If you are an expert for ISO 20022 (e.g. a developer of a library for pain001), we would like to hear your feedback.&lt;/p&gt;
&lt;p&gt;We would also like to see more banks (especially in Switzerland) who show transaction details for pain.001.001 files or even a diff-style analysis tool in their electronic banking interfaces. It would definitely help to cover one of the very common use cases and could actually prevent fraud. We would be happy if our &lt;a class="reference external" href="https://github.com/pentagridsec/riskless-pain"&gt;"riskless pain" tool&lt;/a&gt; gets obsolete in the future.&lt;/p&gt;
&lt;/section&gt;</description><guid>https://www.pentagrid.ch/de/blog/pain001-interfaces-and-payment-of-your-salary/</guid><pubDate>Fri, 21 Nov 2025 13:30:00 GMT</pubDate></item><item><title>Archive Pwn tool released</title><link>https://www.pentagrid.ch/de/blog/archive-pwn-tool-release/</link><dc:creator>Pentagrid AG</dc:creator><description>&lt;figure&gt;&lt;img src="https://www.pentagrid.ch/images/default_preview_image.jpeg"&gt;&lt;/figure&gt; &lt;p&gt;When extracting archive formats there are many things that can go wrong. While some unarchiving tools and libraries protect from malicious archives that include path traversal attacks, other might not or at least not in the default configuration. We wrote a tool to create such archives with path traversal attacks in Python.&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;Recently we've come across different web applications and embedded devices that allow archive formats such as zips, tars and cpio archives as user input. Therefore, it is always important to check if they are affected by path traversal attacks. If you don't know what we're talking about you might want to read about the &lt;a class="reference external" href="https://github.com/snyk/zip-slip-vulnerability"&gt;zip slip vulnerability&lt;/a&gt; or read our explanations in our &lt;a class="reference external" href="https://www.pentagrid.ch/de/blog/wind-river-vxworks-tarextract-directory-traversal-vulnerability/"&gt;Wind River VxWorks tarExtract directory traversal vulnerability (CVE-2023-38346)&lt;/a&gt; advisory.&lt;/p&gt;
&lt;p&gt;While there have been tools such as &lt;a class="reference external" href="https://github.com/0xless/slip"&gt;slip&lt;/a&gt; and &lt;a class="reference external" href="https://github.com/jwilk/traversal-archives"&gt;traversal-archives&lt;/a&gt;, we had some special use cases. Both tools and our new &lt;a class="reference external" href="https://github.com/pentagridsec/archive_pwn"&gt;Archive Pwn&lt;/a&gt; tool slightly vary in supported archive formats (zip, tar and cpio here), file formats (tar ustar, gnu tar, cpio newc, etc.) and implemented attacks (simple path traversal, symlink attacks, etc.).&lt;/p&gt;
&lt;p&gt;We encountered more complicated parsing routines that required us to create custom archives that already include a certain file structure. The analysed code sometimes unpacked a single file from the archive first and an error was thrown if the file was not present. However, the vulnerable code that would allow us to do a path traversal attack was later in the code. Therefore, we created &lt;a class="reference external" href="https://github.com/pentagridsec/archive_pwn"&gt;Archive Pwn&lt;/a&gt; that packs an entire folder into the archive before adding the attack payload entry.&lt;/p&gt;
&lt;p&gt;Most of the ideas came from looking at old vulnerabilities and specifications or the file formats in a hex editor and then implementing attacks such as maximum Windows path length attacks, unicode normalisation, DoS via very deep directories, including a path traversal in the filename included in .gz files, etc.&lt;/p&gt;
&lt;p&gt;Creating a tool that generates as many combinations of attacks as possible was as well important, so the output of the tool can serve as a test collection for unarchiving tools. You can unpack all archives the tool creates and check if you can find a file in a different directory than the unpacking location.&lt;/p&gt;
&lt;p&gt;We've also decided to make sure that we copy the tar and zip libraries from Python and slightly modify them, allowing us to implement further non-standard conform attacks in the future. There's an example in the README on the &lt;a class="reference external" href="https://github.com/pentagridsec/archive_pwn"&gt;Archive Pwn Github page&lt;/a&gt; on how to create your own malicious archives.&lt;/p&gt;
&lt;p&gt;The tool release is related to the recent advisories we released for &lt;a class="reference external" href="https://www.pentagrid.ch/de/blog/busybox-cpio-directory-traversal-vulnerability/"&gt;Busybox cpio directory traversal vulnerability (CVE-2023-39810)&lt;/a&gt; and &lt;a class="reference external" href="https://www.pentagrid.ch/de/blog/wind-river-vxworks-tarextract-directory-traversal-vulnerability/"&gt;Wind River VxWorks tarExtract directory traversal vulnerability (CVE-2023-38346)&lt;/a&gt;, where especially the VxWorks blog post deep-dives into some of the archive vulnerabilities.&lt;/p&gt;</description><guid>https://www.pentagrid.ch/de/blog/archive-pwn-tool-release/</guid><pubDate>Tue, 03 Oct 2023 15:42:00 GMT</pubDate></item><item><title>Ein Open-Source-SMS-Gateway für Pentest-Projekte</title><link>https://www.pentagrid.ch/de/blog/open-source-sms-gateway-for-pentest-projects/</link><dc:creator>Pentagrid AG</dc:creator><description>&lt;p&gt;Zugänge für mobile Anwendungen sind oft an Telefonnummern gebunden. Die Arbeit mit mehreren Personen an einem Projekt kann es irgendwann erfordern, Mobiltelefonnummern für den SMS-Empfang zu teilen. Beim Testen mobiler Anwendungen, die durch eine SMS-basierte Second-Factor-Authentisierung (2FA) geschützt sind, ist die gemeinsame Nutzung von Telefonnummern durch das Testteam manchmal notwendig und sicherheitstechnisch akzeptabel, wenn es sich nur um ein Testsystem handelt. Bei Pentagrid betreiben wir daher ein kleines SMS-Gateway, das wir hiermit als Open Source veröffentlichen.&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;section id="motivation"&gt;
&lt;h2&gt;Motivation&lt;/h2&gt;
&lt;p&gt;Mit SMS als zweitem Authentisierungsfaktor, sendet ein Zielsystem eine SMS an ein Mobiltelefon, und der Prüfer gibt das Token dann manuell in den Webbrowser ein. Während dies für die normale Arbeit noch einigermaßen praktikabel ist, ist es bei einem Penetrationstest ziemlich ineffizient. Insbesondere, wenn die Serverseite die Sitzung hin und wieder invalidiert, weil die getestete Anwendung die Eingabe nicht mag und lediglich die Ablehnung der HTTP-Anfrage von den Softwareentwicklern als nicht schmerzhaft genug erachtet wurde. Wenn ein System nicht dafür ausgelegt ist, mit halbautomatischen Tools wie dem Burp Proxy getestet zu werden, kann 2FA oft nicht einfach für bestimmte Testkonten deaktiviert werden. Um ein solches System dennoch testen zu können, ist es sinnvoll, den zweiten Faktor in den Burp Proxy einzubinden.&lt;/p&gt;
&lt;p&gt;Es gibt viele kommerzielle SMS-Gateways, die eine API für den Versand und Empfang von SMS anbieten. Da der Token jedoch ein Authentisierungsfaktor ist, wenn auch nur ein Teil des gesamten Prozesses, ist die Weitergabe dieser sensiblen Informationen an Dritte keine Option, auch nicht für Testsysteme. Aus diesem Grund haben wir ein SMS-Gateway implementiert, um Drittanbieter-Infrastruktur zu vermeiden.&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://www.pentagrid.ch/images/202212_photo_modem_pool.jpg"&gt;
&lt;img alt="Modem pool mit mehreren SIM-Karten" class="align-center" src="https://www.pentagrid.ch/images/202212_photo_modem_pool.thumbnail.jpg"&gt;
&lt;/a&gt;
&lt;/section&gt;
&lt;section id="ansatz"&gt;
&lt;h2&gt;Ansatz&lt;/h2&gt;
&lt;p&gt;Es gibt ebenfalls einige Mobil-Applikationen für das Weiterleiten von SMS, die auf einem Mobiltelefon eingehende Kurznachrichtenan eine Ziel-E-Mail-Adresse weiterleiten. Das funktioniert, aber die Methode hat Nachteile. Sie erhöht Abhängigkeiten: Man muss zusätzlich dem Anwendungsentwickler, dem E-Mail-Anbieter (wenn man sich dabei auf einen Drittanbieter verlässt) und letztlich auch anderen Anwendungen auf dem Mobiltelefon vertrauen - zumindest zu einem gewissen Grad. Der Ansatz ist zudem nicht gut skalierbar. In der Regel kann ein Telefon bis zu zwei physische SIM-Karten aufnehmen. Für drei oder mehr SIM-Karten wären zusätzliche Telefone erforderlich. Außerdem wird Service-Monitoring kaum unterstützt. Um zu prüfen, ob die Weiterleitungsanwendung noch funktioniert, ist die fast einzige Möglichkeit eine Ende-zu-Ende-Prüfung, die das Senden einer SMS und den Empfang einer Mail umfasst.&lt;/p&gt;
&lt;p&gt;Um diese Nachteile zu vermeiden, haben wir ein SMS-Gateway implementiert, dessen Hauptzweck der Empfang von SMS ist. Es ist außerdem möglich, SMS zu senden, was wir für den Versand von Alarmmeldungen bei der Serverüberwachung nutzen, aber das war nicht der Fokus.&lt;/p&gt;
&lt;p&gt;In dieser ersten Version bietet der SMS-Gateway die folgenden Funktionen:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Verwalten eines Modempools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Empfangen und Senden von SMS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Weiterleiten empfangener SMS an eine Mailadresse&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Senden und Abrufen von SMS über eine XMLRPC-Schnittstelle&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unterstützung für Unstructured Supplementary Service Data, also USSD-Codes für das Aufladen von Prepaid-SIM-Karten&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unterstützung von TLS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integration von Icinga2/Nagios für die Prüfung des inneren Funktionszustandes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integration von Munin für ein paar Statistiken&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="implementation-und-betriebsmodus"&gt;
&lt;h2&gt;Implementation und Betriebsmodus&lt;/h2&gt;
&lt;p&gt;Der SMS-Gateway ist als Python-Programm für Linux implementiert. Das Modul &lt;a class="reference external" href="https://github.com/babca/python-gsmmodem/tree/master/gsmmodem"&gt;python-gsmmodem&lt;/a&gt; bildet die Schnittstelle zum Modem und verarbeitet Modembefehle. Dazu läuft jedes Modem in seinem eigenen Thread. Mehrere Modems werden zu einem Modem-Pool zusammengefasst, der es uns ermöglicht, mehrere SIM-Karten parallel zu betreiben. Der Modem-Pool überwacht den Gesundheitszustand jedes Modems, einschließlich der seriellen Verbindung zum Modem, der Signalstärke und des Kontostandes bei Prepaid-SIM-Karten. Außerdem versucht der Modem-Pool, die Modems im Falle von Problemen neu zu initialisieren.&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://www.pentagrid.ch/images/202212_SMS_Gateway_Overview.png"&gt;
&lt;img alt="Übersicht über die Untermodule des SMS-Gateways" class="align-center" src="https://www.pentagrid.ch/images/202212_SMS_Gateway_Overview.thumbnail.png"&gt;
&lt;/a&gt;
&lt;p&gt;Wenn ein Modem eine SMS empfängt, wird sie in eine interne Queue eingetragen. Ein Client holt die SMS über die API eines integrierten XMLRPC-Servers ab, der auf der Netzwerk-Engine Twisted basiert. Alternativ ist das SMS-Gateway in der Lage, eingehende SMS über SMTPS an eine Ziel-Mailbox zuzustellen. Die SMS-Weiterleitung über SMTPS wird auch als Health-Check überwacht. Wenn es ein Problem mit der SMTPS-Verbindung gibt, schlägt der Health-Check folglich fehl.&lt;/p&gt;
&lt;p&gt;Mit einem XMLRPC-Client kann man mit dem XMLRPC-Server interagieren. Ein XMLRPC-Client kann empfangene SMS abrufen. Die API dafür ist einfach gehalten. Es gibt keine Benutzerverwaltung. Stattdessen autorisiert der XMLRPC-Server Vorgänge mittels API-Token, welche der Client beim Aufruf von Remote-API-Funktionen als Parameter übergibt. Der Server speichert berechtigte API-Token als Hash in einer Konfigurationsdatei und prüft die Token bei Anfragen auf Gültigkeit. Dabei unterscheidet der XMLRPC-Server API-Token für den allgemeinen Abruf von SMS, für den Abruf von SMS für einzelne Modems, für den Versand von USSD-Codes, für den Versand von SMS, für die Abfrage des Zustellungsstatus von SMS und für Überwachungs- und Statistikzwecke.&lt;/p&gt;
&lt;p&gt;Das SMS-Gateway wird mit einem Munin- und einem Icinga-/Nagios-Plugin ausgeliefert, um die Betriebsüberwachung zu unterstützen. Die Monitoring-Plugins sind als XMLRPC-Clients implementiert, die Zustandsinformationen bzw. Statistiken vom XMLRPC-Server abrufen.&lt;/p&gt;
&lt;p&gt;Das SMS-Gateway unterstützt ebenfalls den Versand von SMS. Das birgt allerdings das Risiko, dass SMS an Premiumdienste versendet werden und erhebliche Kosten verursachen. Ebenfalls lassem sich eventuell Buchungsoptionen ändern. Daher kann das Versenden von SMS über eine Präfix-Liste für erlaubte Ziele eingeschränkt werden.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="betrieb-einer-eigenen-installation"&gt;
&lt;h2&gt;Betrieb einer eigenen Installation&lt;/h2&gt;
&lt;p&gt;Wir haben den Quellcode des SMS-Gateways auf &lt;a class="reference external" href="https://github.com/pentagridsec/smsgate"&gt;Github&lt;/a&gt; veröffentlicht, zusammen mit weiterer Dokumentation, wie man ein solches Gateway einrichtet. Es sollte gängige 2G-/3G-/4G-/5G-Modems unterstützen. Im einfachsten Fall könnte man Plastik-USB-Modem-Sticks verwenden, die als "Surfstick" oder ähnlich gehandelt werden.&lt;/p&gt;
&lt;p&gt;Wie man den SMS-Gateway automatisiert nutzen kann, um während des Testens mit der Portswigger Burp Suite keine 2FA-Tokens eingeben zu müssen, erfährt man in unserem englischen Blog-Post &lt;a class="reference external" href="https://www.pentagrid.ch/de/blog/burp-suite-hackvertor-custom-tags-email-sms-tan-multi-factor-authentication/"&gt;Burp Suite - solving E-mail and SMS TAN multi-factor authentication with Hackvertor custom tags&lt;/a&gt;.&lt;/p&gt;
&lt;/section&gt;</description><category>API</category><category>Multi-Factor Authentication</category><category>Pentesting</category><category>Python</category><category>SMS</category><category>Tools</category><guid>https://www.pentagrid.ch/de/blog/open-source-sms-gateway-for-pentest-projects/</guid><pubDate>Tue, 06 Dec 2022 08:23:00 GMT</pubDate></item><item><title>Response Overview Burp Extension</title><link>https://www.pentagrid.ch/de/blog/response_overview_burp_extension/</link><dc:creator>Pentagrid AG</dc:creator><description>&lt;p&gt;Today we would like to announce the release of an updated BurpSuite extension in the BApp store.&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;In the last few months we've been busy improving some of our own tools. One of them was the Response Overview (used to be called "Response Clusterer") Burp extension. We did a complete rewrite from Jython to Kotlin. Jython has some huge compatibility issues inside Burp, just to mention some of them:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Extensions break depending on if Jython version 2.7.0 or 2.7.2 is installed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type issues as Jython needs to convert Java arrays to Python string, which is not trivial in deeply-nested objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jython is not available for Python 3, which is okay, but when our extensions grew large, we missed the type hinting feature of Python 3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cool features of Kotlin such as null-checking or automatically generated getter and setter methods are missing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The only real downside we see is that Kotlin extensions need to be compiled before they can be used, whereas changing a line in a Python script is much easier.&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://www.pentagrid.ch/images/202201_burp_response_overview.png"&gt;
&lt;img alt="Screenshot of the Response Overview Burp plugin" class="align-center" src="https://www.pentagrid.ch/images/202201_burp_response_overview.thumbnail.png"&gt;
&lt;/a&gt;
&lt;p&gt;This extension groups all response bodies by similarity and shows a summary, one request/response per group. The extension will allow a tester to get an overview of the tested website's responses from all tools (scanner, proxy, etc.). It provides an additional "semi-automated detection method" (compared to the usual detection methods response-based, time-based, interaction-based, etc.).&lt;/p&gt;
&lt;p&gt;The new Response Overview extension has some huge memory, performance and UI improvements. This includes being able to sort the overview table as well as hiding items in it.&lt;/p&gt;
&lt;p&gt;Moreover, according to Portswigger, this was the first Kotlin-only extension that was submitted to the Burp internal BApp store. They changed their build-pipeline to make sure Kotlin extensions can be auto-built in the future when submitted to the BApp store. So if you write an extension in Kotlin, make sure to have a look at our &lt;a class="reference external" href="https://github.com/pentagridsec/PentagridResponseOverview"&gt;Github repository&lt;/a&gt;. Moreover, include the API files found in the &lt;a class="reference external" href="https://github.com/bao7uo/burp-extender-api-kotlin"&gt;burp-extender-api-kotlin Github repository&lt;/a&gt; as we did in the Response Overview extension.&lt;/p&gt;
&lt;p&gt;During the journey of learning Kotlin and writing the extension, we encountered two annoying Kotlin compiler bugs. &lt;a class="reference external" href="https://youtrack.jetbrains.com/issue/KT-6653"&gt;One bug&lt;/a&gt; could be circumvented because Portswigger agreed that Kotlin extension can provide their own API files (see above). The &lt;a class="reference external" href="https://youtrack.jetbrains.com/issue/KT-19861"&gt;other bug&lt;/a&gt; was fixed when a new compiler version came out. We still haven't figured out another Serialization bug we encountered. So if you are a Java/Kotlin wizard, we would also be interested to hear from you why the Java Serialization (or rather the deserialization) of the boolean "hidden" flag in the &lt;a class="reference external" href="https://github.com/pentagridsec/PentagridResponseOverview/blob/main/src/main/kotlin/LogEntry.kt"&gt;LogEntry&lt;/a&gt; class is not working (hidden flag is always false when deserialized).&lt;/p&gt;
&lt;p&gt;The &lt;a class="reference external" href="https://github.com/pentagridsec/PentagridResponseOverview"&gt;Github repository&lt;/a&gt; also features more technical information about the extension. The extension can be found in BApp now and the BApp store listing can be found on the &lt;a class="reference external" href="https://portswigger.net/bappstore/e63f09f290ad4d9ea20031e84767b303"&gt;Portswigger website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Have fun with the extension and happy bug hunting!&lt;/p&gt;</description><guid>https://www.pentagrid.ch/de/blog/response_overview_burp_extension/</guid><pubDate>Wed, 12 Jan 2022 13:30:00 GMT</pubDate></item><item><title>Shreddy2 – Ein Raspberry Pi als Löschstation für USB-Sticks</title><link>https://www.pentagrid.ch/de/blog/shreddy2-the-raspberry-pi-storage-scrub-station-for-usb-thumb-drives/</link><dc:creator>Pentagrid AG</dc:creator><description>&lt;figure&gt;&lt;img src="https://www.pentagrid.ch/images/202112_Screenshot_shreddy2.png"&gt;&lt;/figure&gt; &lt;p&gt;"Delete early, delete often" ist das leicht abgewandelte Motto, dass daran
erinnert, Datenlecks durch verlorene oder gestohlene USB-Sticks mittels
regelmäßigem Löschen zu minimieren. Sind Sie es leid, beim Formatieren eines
USB-Sticks auf Ihrem lokalen Computer darauf zu achten, nicht versehentlich das
falsche Gerät zu löschen? Um den Vorgang zu vereinfachen, haben wir eine
USB-Löschstation als Software auf einem Raspberry Pi implementiert. Die
Software wartet  drauf, dass ein USB-Stick angeschlossen wird. Der wird dann
bereinigt. Also: shreddy, ready, go!&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;section id="warnhinweis"&gt;
&lt;h2&gt;Warnhinweis&lt;/h2&gt;
&lt;p&gt;Zunächst einmal sollten sensible Informationen nicht ungeschützt auf mobilen
USB-Sticks gespeichert werden, vor allem dann nicht, wenn die Gefahr besteht,
dass sie verloren gehen. Es ist daher immer eine gute Idee, Daten vor dem
Speichern zu verschlüsseln oder einen USB-Stick mit Verschlüsselungsfunktion zu
verwenden, der man vertrauen kann oder noch besser, die verifiziert wurde.
Nichtsdestotrotz werden viele Daten auf USB-Sticks gespeichert. Wenn diese
nicht regelmäßig gelöscht werden, sammelt sich ein Informationsberg, der,
auch wenn einzelne Dateien weniger sensibel sind, in der Menge viel über interne Aktivitäten
oder persönliche Angelegenheiten preisgeben kann. Daher verringert das
regelmäßige Löschen von USB-Sticks die Auswirkungen im Falle eines Verlustes.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="loschen-von-flash-speichern"&gt;
&lt;h2&gt;Löschen von Flash-Speichern&lt;/h2&gt;
&lt;p&gt;USB-Sticks nutzen Flash-Speicher. Werden Informationen darauf gelöscht, werden
die Daten zunächst nicht wirklich gelöscht. Dateiinhalte können oft auf der Ebene
des Dateisystems wiederhergestellt werden, insbesondere bei &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Undeletion"&gt;FAT-Dateisystemen&lt;/a&gt;, die auf USB-Sticks weit verbreitet
sind. Ein Wiederherstellen ist solange möglich, wie Verwaltungsinformationen
und Dateiinhalte nicht überschrieben werden. Aber selbst bei
teilüberschriebenen Dateien können noch genügend extrahierbare Informationen
erhalten bleiben. Früher wurden Dateien auf Magnetplatten mit speziellen
Löschprogrammen mehrfach überschrieben, um eine Wiederherstellung zu verhindern
oder zu erschweren. Während dies bei magnetischen Festplatten gut funktioniert,
funktioniert dieser Ansatz bei Flash-Speichern nicht. Der
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Flash_memory_controller"&gt;Flash-Speicher-Controller&lt;/a&gt; versucht,
Schreibvorgänge über den Flash-Speicher zu verteilen, sodass eine gleichmäßige
Schreibbelastung der Speicherzellen erzielt wird. Diese Methode wird als
Wear-Levelling bezeichnet und verlängert die Lebensdauer eines Speichermediums.
Dieses Wear-Leveling verhindert jedoch, eine einzelne Datei einfach zu
überschreiben. Beim Versuch eine Datei mehrfach zu überschreiben würden zwar
mehrere Regionen innerhalb des Flash-Speichers überschrieben werden, nicht
notwendigerweise aber die Speicherzellen, an denen der ursprüngliche
Dateiinhalt gespeichert war. Außerdem hält der Flash-Speicher-Controller
zusätzlichen Speicherplatz als Ersatz für ausfallende Speicherzellen vor. Wurde
der Dateiinhalt an eine solche nun nicht mehr nutzbare Stelle geschrieben, kann
er ohne Low-Level-Zugriff auf den Flash-Speicher nicht mehr überschrieben werden.&lt;/p&gt;
&lt;p&gt;Was ist also der richtige Weg, um einen USB-Speicherstick zu löschen? &lt;a class="reference external" href="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-88r1.pdf"&gt;NIST SP
800-88 Rev. 1 "Guidelines for Media Sanitization"&lt;/a&gt;
empfiehlt das folgende Verfahren zum Löschen von USB-Wechselmedien
(einschließlich sogenannter Pen Drives, Thumb Drives, Flash Memory Drives,
Memory Sticks usw.):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Datenträger werden mit organisatorisch genehmigten und getesteten
Überschreibtechnologien/-methoden/-tools überschreiben. Das Überschreiben
sollte mindestens zwei Durchgänge umfassen, und dabei ein Muster im ersten
Durchgang und sein Komplementärmuster im zweiten Durchgang verwenden. Es
können zusätzliche Durchgänge verwendet werden.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Das NIST fügt jedoch auch als Hinweis hinzu: "In den meisten Fällen, in denen
eine Bereinigung gewünscht ist, sollten USB-Wechselmedien vernichtet werden."
Das ist die Empfehlung, um auf Nummer sicher zu gehen.&lt;/p&gt;
&lt;p&gt;Für weniger kritische Daten und Datensammlungen kann jedoch ein einfacher
Überschreibansatz mit mehreren Durchgängen ausreichend sein. Da das
Überschreiben einer einzelnen Datei aufgrund der Art und Weise, wie der
Flash-Speicher verwaltet wird, prinyipbedingt kein Überschreiben darstellt,
bleibt als Ansatz ein mehrfaches vollständiges Überschreiben, um das Risiko von
Datenrückständen erheblich zu verringern. Wei et al. beobachteten in ihren
praktischen &lt;a class="reference external" href="https://www.usenix.org/legacy/event/fast11/tech/full_papers/Wei.pdf"&gt;Wiederherstellbarkeitstests&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;In den meisten Fällen reichte das zweimalige Überschreiben des gesamten
Datenträgers aus, um den Datenträger zu säubern, unabhängig vom vorherigen
Zustand des Laufwerks. Es gab drei Ausnahmen: Etwa 1 % (1 GB) der Daten
blieb auf Laufwerk A nach zwanzig Durchläufen übrig. Wir testeten auch eine
kommerzielle Implementierung des 5220.22-M-Standards mit vier Durchläufen
auf Laufwerk C. Für den Fall der sequentiellen Initialisierung entfernte
sie alle Daten, aber bei der zufälligen Initialisierung blieb ein einzelner
Fingerabdruck (Anmerkung: zuvor wurden auf dem Datenträger Testdaten
verteilt) übrig.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mit anderen Worten: Es gibt keinen wirklich korrekten Weg der sicheren
Datenlöschung, außer die Daten nicht außerhalb eines Verschlüsselungscontainers
zu verarbeiten oder den Datenträger physisch zu zerstören. Sagen Sie uns nicht,
Sie seien nicht gewarnt worden. Trotzdem haben wir ein Tool erstellt, wenn Sie
versuchen möchten, Daten zu löschen.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="software"&gt;
&lt;h2&gt;Software&lt;/h2&gt;
&lt;p&gt;Wir haben eine Software in Python implementiert. Diese nutzt die Bibliothek
py-udev für das Monitoring von entsprechenden USB-Events. Die Speichermedien
werden dann in drei Durchgängen überschrieben: Der erste und zweite Durchgang
verwenden den Befehl &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Badblocks"&gt;badblocks&lt;/a&gt;, um
die komplementären Muster 0x00 und 0xff zu schreiben. Der badblocks-Befehl ist
eigentlich nicht für das Überschreiben von Daten gedacht. Dies ist jedoch ist ein
Nebeneffekt beim Prüfen des Speichers auf beschädigte Bereiche. Wir verwenden das Programm
hier, weil es die Angabe eines expliziten Schreibmusters erlaubt. Das
Überschreiben des Blockgeräts in einem dritten Durchgang wird durch den Aufruf
des &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Shred_(Unix)"&gt;shred-Befehls&lt;/a&gt; im Zufallsmodus
umgesetzt. Das Überschreiben des Speichers mit Zufallsdaten soll den Aufwand
für die Suche nach extrahierbaren Datenresten erhöhen. Anschließend legt die
Software ein neues FAT-32-Dateisystem an. Dazu nutzt das Programm &lt;code class="docutils literal"&gt;parted&lt;/code&gt; und
&lt;code class="docutils literal"&gt;mkfs&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Die Software kann auf einem Raspberry Pi installiert werden, der in einem Büro
in einer vertrauenswürdigen Umgebung platziert wird. Nutzerinnen und Nutzer
können ihre benutzten USB-Sticks anstecken und später wiederkommen, um sie
abzuholen. Dies kann ein eigenes Sicherheitsproblem darstellen. Nochmals, Sie
wurden gewarnt.&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://www.pentagrid.ch/images/202112_Screenshot_shreddy2.png"&gt;
&lt;img alt="Screenshot der Telnet-Statusseite" class="align-center" src="https://www.pentagrid.ch/images/202112_Screenshot_shreddy2.thumbnail.png"&gt;
&lt;/a&gt;
&lt;p&gt;Die Software implementiert zwei Methoden, um über den Status zu informieren. In
einem Netzwerkmodus hat die Löschstation Netzwerkschnittstelle, über die
mittels &lt;code class="docutils literal"&gt;netcat&lt;/code&gt; oder &lt;code class="docutils literal"&gt;telnet&lt;/code&gt; Statusinformationen abgefragt werden können (siehe
Screenshot). Da der Netzwerkmodus einem möglicherweise kompromittierten
Raspberry Pi erlaubt, den Inhalt des USB-Sticks auszulesen und Daten an einen
Angreifer auszuleiten, könnte der Raspberry Pi alternativ in einem
Funkschnittstellen blockierenden Metallgehäuse und ohne Ethernet betrieben
werden. Die zweite Methode der Statussignalisierung ist ein am Raspberry Pi
angebrachtes USB-Busylight. Solange ein Löschvorgang läuft, leuchtet das
Busylight rot, ein rotes Blinken meldet einen Fehler, und ein grünes Licht
bedeutet, dass alle eingesteckten USB-Sticks verarbeitet wurden. Im Leerlauf,
wenn kein USB-Speicherstick eingesteckt ist, spart das Busylight Energie und
ist aus. Die Software unterstützt derzeit Busylights von Kuando über die
Python-Bibliothek &lt;a class="reference external" href="https://github.com/nitram2342/pyBusylight"&gt;pyBusylight&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Der Quellcode ist auf &lt;a class="reference external" href="https://github.com/pentagridsec/shreddy2"&gt;Github&lt;/a&gt;
verfügbar. Dort ist auch die Installationsanleitung zu finden.&lt;/p&gt;
&lt;/section&gt;</description><category>Flash</category><category>Information Disclosure</category><category>Operational Security</category><category>Raspberry Pi</category><category>Tools</category><guid>https://www.pentagrid.ch/de/blog/shreddy2-the-raspberry-pi-storage-scrub-station-for-usb-thumb-drives/</guid><pubDate>Mon, 20 Dec 2021 05:12:21 GMT</pubDate></item></channel></rss>