<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://hacking-printers.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=78.49.97.12</id>
		<title>Hacking Printers - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://hacking-printers.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=78.49.97.12"/>
		<link rel="alternate" type="text/html" href="http://hacking-printers.net/wiki/index.php?title=Special:Contributions/78.49.97.12"/>
		<updated>2026-06-22T13:30:11Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>http://hacking-printers.net/wiki/index.php?title=Physical_damage&amp;diff=105</id>
		<title>Physical damage</title>
		<link rel="alternate" type="text/html" href="http://hacking-printers.net/wiki/index.php?title=Physical_damage&amp;diff=105"/>
				<updated>2017-01-12T10:44:32Z</updated>
		
		<summary type="html">&lt;p&gt;78.49.97.12: Created page with &amp;quot;Long-term settings for printers and other embedded devices are stored in non-volatile memory ([https://en.wikipedia.org/wiki/Non-volatile_random-access_memory NVRAM]) which is...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Long-term settings for printers and other embedded devices are stored in non-volatile memory ([https://en.wikipedia.org/wiki/Non-volatile_random-access_memory NVRAM]) which is traditionally implemented either as [https://en.wikipedia.org/wiki/EEPROM EEPROM] or as [https://en.wikipedia.org/wiki/Flash_memory flash memory]. Both components have a limited lifetime. On early HP LaserJets `flash chips would only sustain about 1000-2000 cycles of re-writing' &amp;lt;ref&amp;gt;''[http://blog.cyrtech.de/sites/default/files/Counting%20Pages%20in%20Printer%20Data%20Streams%20%28D2%29.pdf Counting Pages in Printer Data Streams]'', J. Deußen, 2011, p. 36&amp;lt;/ref&amp;gt;. Today, vendors of flash memory guarantee about 100,000 rewrites before any write errors may occur. This number sounds large, but [[PJL]] and [[PostScript]] print jobs themselves can change long-term settings like paper tray media sizes or control panel passwords. Doing this a lot of times on purpose can be a realistic attack scenario leading to physical destruction of the NVRAM. Note that printing functionality itself is not affected but fixed settings containing wrong values can make the device practically unusable.&lt;br /&gt;
&lt;br /&gt;
== PJL ==&lt;br /&gt;
&lt;br /&gt;
For a practical test to destroy NVRAM write functionality one can continuously set the long-term value for the number of copies with different values for &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
  @PJL DEFAULT COPIES=X&lt;br /&gt;
&lt;br /&gt;
In an evalation with 20 laser printers, eight devices indicated a corrupt NVRAM within 24 hours &amp;lt;ref&amp;gt;''[http://homepages.rub.de/jens.mueller-2/publications/2016-exploiting-network-printers.pdf Exploiting Network Printers]'', J. Müller, 2016, p. 41&amp;lt;/ref&amp;gt;. Some EEPROM error codes, while others completely refused to set any long-term values anymore. The impact of such physical NVRAM destruction however is limited for two reasons: First, NVRAM parameters were not frozen at their current state (which would have been a random number of copies) but instead fixed to the factory default value. Secondly, all variables could still be changed for the current print job using the &amp;lt;code&amp;gt;@PJL SET...&amp;lt;/code&amp;gt; command. Only the functionality to change long-term settings was broken.&lt;br /&gt;
&lt;br /&gt;
'''How to test this attack?''' The feasibility of this attack, which has been implemented as the ''destroy'' command in [[PRET]] can be tested as follows:&lt;br /&gt;
&lt;br /&gt;
  ./pret.py -q printer pjl&lt;br /&gt;
  Connection to printer established&lt;br /&gt;
 &lt;br /&gt;
  Welcome to the pret shell. Type help or ? to list commands.&lt;br /&gt;
  printer:/&amp;gt; destroy&lt;br /&gt;
  Warning: This command tries to cause physical damage to the&lt;br /&gt;
  printer NVRAM. Use at your own risk. Press CTRL+C to abort.&lt;br /&gt;
  Starting NVRAM write cycle loop in... 10 9 8 7 6 5 4 3 2 1 KABOOM!&lt;br /&gt;
  I'm afraid. I'm afraid, Dave. Dave, my mind is going...&amp;quot;&lt;br /&gt;
  NVRAM died after 543894 cycles, 18:46:11&lt;br /&gt;
&lt;br /&gt;
'''Who can perform this attack?''' The attack can only be performed by an attacker who has the capability to establish various [[Port 9100 printing|network connections]] over a longer period of time. A [[USB drive or cable|local attacker]] sneaking into a copy room usually does not have enough time to send a continuous datastream of for about 24 hours hours &amp;lt;ref&amp;gt;''Note that it might theoretically be possible to start a large print job – approximately several hundred megabytes of malicious PJL commands – from USB stick on a Friday afternoon and just walk away.''&amp;lt;/ref&amp;gt;. However, she can use an axe or a hammer to cause physical damage. In a [[cross-site printing]] scenario, the victim would have to keep an attacker-controlled web site open for hours which may also be considered unrealistic &amp;lt;ref&amp;gt;''Unless you find XSS on Facebook, in which case the impact of broken printers may be negligible.''&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== PostScript ==&lt;br /&gt;
&lt;br /&gt;
For PostScript, one needs to find an entry in the ''currentsystemparams'' dictionary which survives a reboot (and therefore must be stored in some kind of NVRAM). A good candidate are PostScript passwords as discussed in [[credential disclosure]]. System parameters can be incremented in a PostScript loop as show below, which can lead to a large number of NVRAM write cycles per second if the printers hardware is implemented to write values directly instead of caching them:&lt;br /&gt;
&lt;br /&gt;
  /counter 0 def&lt;br /&gt;
  { &amp;lt;&amp;lt; /Password counter 16 string cvs&lt;br /&gt;
       /SystemParamsPassword counter 1 add 16 string cvs&lt;br /&gt;
    &amp;gt;&amp;gt; setsystemparams /counter counter 1 add def&lt;br /&gt;
  } loop&lt;br /&gt;
&lt;br /&gt;
Such ideas are not new: The first PostScript malware in the wild, which appeared in 1990, applied the ''setpassword'' operator multiple times which quickly led to the password becoming unchangeable because of very limited EPROM write cycles on early LaserWriter printers &amp;lt;ref&amp;gt;''[http://web.archive.org/web/20010720184200/http://www.sevenlocks.com/password/pspass.txt New PostScript Virus!?]'', CompuServe Desktop Publishing Forum (via archive.org), 1990&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;''[http://www.faqs.org/faqs/computer-virus/macintosh-faq/ Viruses and the Macintosh]'', D. Harley, 2000&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''How to test this attack?''' The feasibility of this attack, which has been implemented as the ''destroy'' command in [[PRET]] can be tested as follows:&lt;br /&gt;
&lt;br /&gt;
  ./pret.py -q printer ps&lt;br /&gt;
  Connection to printer established&lt;br /&gt;
 &lt;br /&gt;
  Welcome to the pret shell. Type help or ? to list commands.&lt;br /&gt;
  printer:/&amp;gt; destroy&lt;br /&gt;
  Warning: This command tries to cause physical damage to the&lt;br /&gt;
  printer NVRAM. Use at your own risk. Press CTRL+C to abort.&lt;br /&gt;
  Starting NVRAM write cycle loop in... 10 9 8 7 6 5 4 3 2 1 KABOOM!&lt;br /&gt;
  NVRAM write cycles: 1000, 2000, 3000, ...&lt;br /&gt;
&lt;br /&gt;
'''Who can perform this attack?''' Any anyone who can print, for example through [[USB drive or cable]], [[Port 9100 printing]] or [[Cross-site printing]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>78.49.97.12</name></author>	</entry>

	</feed>