Summary …
While working on getting the Business Card feature to work correctly, I discovered that I was able to access the UserInfoServlet on my Sametime server without having to provide any credentials and “see” what Business Card information would be returned for me, Patrick and anybody in our company.
The important keywords here are “without having to provide any credentials”. After digging a bit more, I discovered that I could reproduce the same results when I accessed the internet facing Sametime servers of other companies. With this, I was able to get one of the phone number another famous blogger of the Yellowverse (one who happens to be a pilot to give you a hint) and the location of a famous speaker at Lotusphere (one who likes Turtles to give you another hint).
This. Is. Not. Good.
The Problem …
The Sametime Business Card feature, introduced a while back, works by having the Sametime server call a servlet called “UserInfoServlet” in the servlet directory. Mr. Mikkel Flindt Heisterberg has written a very nice, and detailed, blog post (here) titled “Reverse engineering the Sametime 7.5 business card servlet” to help us all understand how that servlet works.
The information from Mr. Heisterberg’s blog is especially useful, for example, when you are setting up your Sametime Server and fiddling with the Business Card feature. Why? Simply because you can troubleshoot and test what the Business Card will display by accessing a URL like this:
http://st.uu.com/servlet/UserInfoServlet?operation=3&userid=rincewind
And here’s the catch 22: if your Sametime Server is configured to allow anonymous access so that your employees can have Sametime meetings with other people from the outside, the server will give you the info about that user without asking for any credentials whatsoever.
So, now that you know this, what’s stopping you from doing a Google search on “Welcome to IBM Sametime”, finding a server which allows anonymous access, doing a cross-check in the company’s “Contact Us” page or forums to find the CEO’s name and hitting that URL to get his phone number after a few trials and errors to get his user id right?
Answer: nothing is stopping you.
The Fix That Lotus Recommends …
Well, I thought I had a security issue on my server so I did what I always do: I opened a PMR with Lotus Support. After going back and forth in emails with a support rep, he said that the only solution he could think of was to put in a firewall restriction on any url with “servlet/UserInfoServlet?” in the URL. When I asked if that would break the Sametime Business Card lookups, the answer I got was “Most of the our clients do not send the information directly via HTTP directly to the HTTP server. We use the VP channel via 1533. In this case we send this information to the Sametime server which then uses this request to format the URL to call to the userinfoservlet and send this request to lookup names. In this case if you denied external HTTP access to the server, other calls (browser based) would be denied, but the client based calls should still go through.“.
Apart from that, he wrote that there no other solutions yet. Since there was no other solutions, he created an SPR for a future release (the SPR # is MALN82QM5M).
Now, just to make sure that I wasn’t crazy, I emailed Mr. Mikkel Flindt Heisterberg and he quickly replied back to me that, “yes”, this could be a potential issue depending on your viewpoint and that “yes”, the firewall workaround would be a good workaround for now. Mr. Heisterberg also mentioned in his reply that ”the servlet specification doesn’t provide any access control in the same way we’re used to with Notes and Domino so unfortunately protecting the servlet is not as easy as “just adding access control”. It will also make getting business card data from Sametime more complex.”.
The Temporary Fix … Until your Firewall Guys Put the Rule in Place …
Since most of my firewall experts are snowed-in and currently digging their way out of their own house, I could have decided to fiddle with the firewall myself … but I decided to go another way: I created a temporary URL redirection rule for my Sametime server to prevent access to the servlet.
That’s what I did for now and here’s the exact steps on how I did it if you want to go this route …
01. Open the Domino Directory on your Sametime server.
02. Go to the server documents view and open the Sametime server document (if I remember, internet sites docs aren’t allowed for a ST 7.5 server … but if I’m wrong and you are using Internet sites documents then open the site for your Sametime server).
03. Once the server doc is opened (or internet site document), click on the action button “Create Web…” and select “URL Mapping/Redirection”.
04. Once the new document has appeared, go to the “Basics” tab.
05. On the “Basics” tab, select “URL –> Redirection URL” in the “What do you want to setup” field.
06. Now go to the “Site Information” tab.
07. Enter the IP address of our server in the “IP Address” field (actually, I noticed that it’s not required …).
08. Now go to the “Mappings” tab.
09. On the “Mappings” tab, go in the “Incoming URL Path” field and type this: /servlet/UserInfoServlet*
10. Now, click in the “Redirection URL string” field and type this: /stcenter.nsf
11. Click on the “Administration” tab.
12. Set the Owner and Administrators field to whatever is the standard in your environment.
13. When ready, click on “Save & Close”.
14. Now go on the server console and type “TELL HTTP REFRESH”.
15. Once the HTTP tasks has refreshed, try to access the same url as above (change the hostname to your server name and the userid to yours) to test if it redirects you to the Meeting Center instead of handing you information about your user id.
Parting Words …
Keep in mind that “mileage may vary” … i.e., I want to protect this Servlet and the information it returns from the outside but maybe this is a non-issue for you. If you haven’t configured the business cards feature or if your Sametime server uses a completely different directory, maybe this is not something you need to be worried about … just keep this in mind.
Thanks for reading!
Marc