The XViewer Project

 

XViewerXViewer – a free, open source and fixed client for the TRENDnet TK-IP101 KVM-over-IP switch, forked from the proprietary KViewer:

1.) Recent History:

Having bought a TK-IP101 KVM-over-IP box from TRENDnet recently, I stumbled upon some [pretty nasty software problems] with their client due to the end-of-life nature of the product. To still manage to remote-control my server in an out-of-band way, I looked at my options and found that I cannot do anything about TRENDnets “IPViewer.exe” utility for Windows. So I looked at the “KViewer.jar” Java part, which is broken since Java 1.6u29. I managed to decompile it, fix up all the errors and warnings in the code plus patch the blocker bug in the crypto code so it can once again work on modern Java Runtime Environments like 1.7u60 or 1.8u5.

TRENDnet TK-IP101

The TRENDnet TK-IP101 KVM-over-IP box, that XViewer is made for

I asked TRENDnet whether they can publish my modified version, but they refused, because the TK-IP101 is no longer supported. So I asked whether I could just release it myself, and to my great surprise they [allowed me to publish the program and the modified source code under the free GNU General Public License] (GPL). An awesome move by TRENDnet if you ask me. As I was asked to remove all traces of company and product names from the program, I also chose to rename the project to “XViewer” and its corresponding companion tool Impcert to “XImpcert”. This is a reference to this server (“XIN.at”) and this weblog.

KVM host:port

The original TRENDnet KViewer, that works only up to Java 1.6u27

XViewer

The new XViewer, that works on any current Java 1.7 and 1.8

I do have to state though, that I am in no way affiliated with TRENDnet. TRENDnet can not be held liable for any damage or other problems resulting from the use of the modified XViewer or its companion tool XImpcert. For any additional information please refer to the GPLv3 software license embedded in the programs and to the documentation below.

2.) Platforms:

Platforms that XViewer and XImpcert have been tested on successfully:

  • Windows XP Professional SP3 (NT 5.1)
    • Oracle/Sun JRE 1.7u60, 32-Bit
  • Windows XP Professional x64 Edition SP2 (NT5.2)
    • Oracle/Sun JRE 1.7u60, 64-Bit
    • Oracle/Sun JRE 1.8u5, 64-Bit
  • Windows 7 x64 SP1 (NT 6.1)
    • Oracle/Sun JRE 1.7u60, 64-Bit
  • Windows 10 Technical Preview x64 SP1 (NT 6.4)
    • Oracle/Sun JRE 1.8u20, 64-Bit
  • MacOS X 10.9.0 & 10.9.4 (Mavericks)
    • Oracle/Sun JRE 1.8u11, 64-Bit
  • CentOS 6.5 Linux x86_64
    • Oracle/Sun JRE 1.7u60, 64-Bit
    • Oracle/Sun JRE 1.8u5, 64-Bit
  • PC-BSD 9.2-p12 UNIX x86_64
    • OpenJDK 1.7.0_25, 64-Bit
  • FreeBSD 10.0 UNIX i386
    • OpenJDK 1.7.0_25, 32-Bit
  • OpenBSD 5.6 UNIX i386
    • OpenJDK 1.7.0_55, 32-Bit
  • Oracle Solaris 11.1 x86_64 (SunOS 5.11)
    • Oracle/Sun JRE 1.7u7, 64-Bit

Testing procedures include the import of a server as well as a client certificate, test of server-based as well as 2-way PKI authentication with encryption and basic use of the TK-IP101 KVM box itself, including mouse pointer synchronization, keyboard mapping and changing a few settings on the fly. Also, several errors / misconfigurations are tested for proper exception handling.

XViewer on PC-BSD 9.2

XViewer on an exotic platform: PC-BSD 9.2, based on FreeBSD, OpenJDK 1.7

De-/Recompiled & "fixed" KViewer connecting to a machine much older even than its own crappy code

Early version of XViewer running on Linux, accessing a remote Windows 2000 Server.

3.) Downloads:

And here are the downloads, the original TRENDnet versions are provided for reference only:

For now, XViewer and XImpcert do not have their own documentation, but I will see to that in the coming weeks. Note that the company name “TRENDnet” is not mentioned anywhere in XViewer or XImpcert, not in the program or the source code, as requested by TRENDnet. As soon as proper documentation has been written, it will also be posted here to complete things. The XCA guide by TRENDnet will also be updated to show how it’s done using a current XCA version.

Update: Proper documentation for the newest version of XCA for certificates & keys creation as well as documentation for the use of XViewer and XImpcert is now available in PDF form (see above)! If you’re setting up from scratch you’d still need to read the TK-IP101 manual too, if not, you should be set with my new documentation!

So if you’re still using a TRENDnet TK-IP101 and you wish you could use the software with modern operating systems and Java Runtime Environments, this is your solution! There is a “but” however…

4.) What has been changed so far:

  • XImpcert release v1.1:
    • Added POSIX file system permission setting when on POSIX compliant OS to make imported certificates access more secure, allow only the user to access them. Simply launching and quitting XImpcert v1.1 will lock the existing cert directory down on Linux/UNIX, if you’ve imported the certificates with an older version (ImportCertificate.java):

      expand/collapse source code

      1. /* Added by Michael Lackner aka Grand Admiral Thrawn
      2.  * This checks whether we're sitting on a POSIX compliant system.
      3.  */
      4. private static final boolean isPosix = FileSystems.getDefault().supportedFileAttributeViews().contains("posix");
      1. /* Added by Michael Lackner aka Grand Admiral Thrawn
      2.  * This sets the certificate import directories' file system permission
      3.  * to 700 or rwx------ on POSIX compliant file systems. This is omitted
      4.  * when sitting on a non-POSIX compliant system.
      5.  * 
      6.  * This is done to make sure only the owning user of the imported root
      7.  * and client certificates may access them.
      8.  * 
      9.  * We are assuming, that the users' home directory is residing on a
      10.  * POSIX compliant file system when on a POSIX compliant operating
      11.  * system.
      12.  * 
      13.  * For determination of POSIX compliance, the file system attributes of
      14.  * the file system that the program is being run from will be checked.
      15.  */
      16. if (isPosix) {
      17.   Set perms = new HashSet();
      18.   /* Add owner permissions */
      19.   perms.add(PosixFilePermission.OWNER_READ);
      20.   perms.add(PosixFilePermission.OWNER_WRITE);
      21.   perms.add(PosixFilePermission.OWNER_EXECUTE);
      22.   /* Add group permissions
      23.   perms.add(PosixFilePermission.GROUP_READ);
      24.   perms.add(PosixFilePermission.GROUP_WRITE);
      25.   perms.add(PosixFilePermission.GROUP_EXECUTE);
      26.   Add others permissions
      27.   perms.add(PosixFilePermission.OTHERS_READ);
      28.   perms.add(PosixFilePermission.OTHERS_WRITE);
      29.   perms.add(PosixFilePermission.OTHERS_EXECUTE); */
      30.  
      31.   /* Apply permissions */
      32.   Files.setPosixFilePermissions(Paths.get(this.XPath), perms);
      33. }

  • Initial release v1.0:
    • Fix of all errors reported by javac 1.7u60 / Eclipse Luna for Java 1.7
    • Fix of all warnings reported by javac 1.7u60 / Eclipse Luna for Java 1.7
    • Added commit by [Cosmonate] to fix erratic behavior on early Window close, source (SessionDialog.java):

      expand/collapse source code

      1. /*
      2.  * Contributed by cosmonate to fix a window closing issue in the session
      3.  * dialog, where the AWT Frame would not be properly shut down.
      4.  * @see javax.swing.JDialog#processWindowEvent(java.awt.event.WindowEvent) 
      5.  */
      6. @Override 
      7. protected void processWindowEvent(WindowEvent e) {
      8.   super.processWindowEvent(e);
      9.   if (e.getID() == WindowEvent.WINDOW_CLOSING)
      10.     System.exit(0);
      11. }

    • Fix blocker bug: Bypass of a CBC-cipher related security patch by Oracle, [see here], source below
    • Added proper cipher suite determination despite the KVM box offering only one cipher, source of both fixes (XViewer.java):

      expand/collapse source code

      1. public static void main(String[] paramArrayOfString)
      2. {
      3.   /* Added by the GAT from http://wp.xin.at                             */
      4.   /* This disables CBC protection, thus re-opening the connections'     */
      5.   /* BEAST vulnerability. No way around this due to a highly restricted */
      6.   /* KLE ciphersuite. Without this fix, TLS connections with client     */
      7.   /* certificates and PKI authentication will fail!                     */
      8.   java.lang.System.setProperty("jsse.enableCBCProtection", "false");
      9.   /* ------------------------------------------------------------------ */
      10.   /* Added by the GAT from http://wp.xin.at                        */
      11.   /* This enables insecure TLS renegotiation as per CVE-2009-3555  */
      12.   /* in interoperable mode.                                        */
      13.   java.lang.System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "false");
      14.   java.lang.System.setProperty("sun.security.ssl.allowLegacyHelloMessages", "true");
      15.   /* ------------------------------------------------------------- */
      16.   KViewer localKViewer = new KViewer();
      17.   localKViewer.mainArgs = paramArrayOfString;
      18.   localKViewer.init();
      19. }

    • Fixated interoperable SSL handshake mode to make compatibility with future Java versions more likely, source (RfbProto.java):

      expand/collapse source code

      1. /* Added by the GAT aka Michael Lackner:
      2.  * This does proper Ciphersuite negotiation, even though our only real cipher accepted by
      3.  * the KVM is "SSL_RSA_WITH_3DES_EDE_CBC_SHA".
      4.  */
      5. String[] suites = localSSLSocket.getSupportedCipherSuites();
      6. localSSLSocket.setEnabledCipherSuites(suites);

    • Added GPLv3 license
    • Added “About” windows
    • Added some code comments

5.) Security concerns:

There are issues with this. The reason why the old KViewer does not work with modern Java versions is that Oracle chose to patch certain issues related to the man-in-the-middle BEAST vulnerability that gained some fame in connection with the NSA scandals. See [CVE-2011-3389] for details. Also, XViewer uses an interoperable SSL/TLS handshake mode for SSL renegotiations that is not considered overly secure anymore, see [Oracle on CVE-2009-3555] for more details.

There is nothing I can do about those issues, as it would require updating the KVM box’s firmware. While the firmware is open source under the GPL, this is still beyond my reach as I have no access to TRENDnets development kits and testing facilities.

So, if you have extreme security requirements, you should maybe look elsewhere. If you are not concerned about man-in-the-middle attacks so much, XViewer may be what you’re looking for.

6.) Have fun:

Cheers! Beer Smilie

CC BY-NC-SA 4.0 The XViewer Project by The GAT at XIN.at is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(required)

(required)