Advertisement

Exchange/iOS "meeting hijack" history goes back well before iOS 6

Yesterday, in discussing the new reports of meeting invitation issues between Microsoft Exchange and iOS 6 devices using ActiveSync, I mentioned that I recall having seen these sorts of problems in prior versions of iOS and OS X, albeit infrequently. The issue manifests as one recipient declining an invitation which mistakenly cancels the meeting for everyone, "hijacking" the meeting out from under the original organizer. My recollection was probably accurate, given the report below from a TUAW reader who prefers not to identify his former employer.

The full rundown is worth reading, but here's the summary: iOS's implementation of ActiveSync, in iOS 6 and well before, may be doing some things (asserting ownership of meetings that in fact do not "belong" to the Exchange account on the iPhone) that theoretically should not be allowed under the protocol specification. Exchange, in turn, is not enforcing the spec and refusing these inappropriate requests as it ought; it's taking them at face value. The end result: meetings get dropped but neither vendor is apparently willing to take point on the issue.

Our reader's story:

The problem with iOS and Exchange is something that we discovered at my previous place of employment. It's a nasty bug and I'm sad to see that it persists. Before I sat down to write you, [I checked with] those folks to see if iOS 6.0 had made it better at all. They reported it was worse.

With that in mind...

We had a term for the problem. It was "meeting hijacking." It describes a scenario in which an iOS device could "hijack" a Microsoft Exchange meeting. The hijacking would make an attendee the organizer of the meeting and if they declined or deleted the meeting, Exchange would then send a decline to [all the other invitees] and cause fairly major issues.

We first witnessed this problem around iOS 4.3, if I remember correctly. We were running Exchange 2007 for tens of thousands of users. We had the latest service packs and cumulative updates installed. (The problem also occurred in iOS 5.0 and higher, and apparently it's not fixed in iOS 6.0 either. It has also been verified against Exchange 2010, but more on that in a minute). To reproduce the issue, here's what we did:

  1. Using Outlook for Windows, create a meeting and add attendees. Make one of the attendees an email list that is EXTERNAL to the Exchange organization. That means it cannot be a distribution group in Active Directory. It needs to be a Mailman or majordomo list that is outside the Exchange org.

  2. The members of the external email list receive the invitation and accept it. The acceptance is written back to Exchange and put on the calendar.

  3. The iOS device owned by a member of the email list picks up the meeting and places it on the calendar. All is happy.

  4. At some point, the iOS device syncs the calendar via ActiveSync and suddenly becomes confused about who the owner of the meeting should be (the organizer, in Exchange-speak). The iPhone decides that its owner should become the organizer, since it has no idea who the real owner is, and syncs this property change back to the Exchange server. Exchange 2007 now has a disconnected copy of the meeting with a different owner. Exchange is agnostic about this.

  5. Now the iPhone owner declines the meeting for whatever reason. Exchange automatically generates a cancellation or decline notice and sends it out to everyone since the disconnected copy of the meeting has a different owner. This results in mass confusion and sometimes will delete the meeting from the other calendars.

We verified this problem against iOS 4, 5 and 6 with Exchange 2007 and 2010. In Exchange 2010, Microsoft introduced a "calendar repair agent" that is supposed to detect this problem and resolve it. This calendar repair agent is a daily timer job. Microsoft did release patches on Exchange 2007 SP2 and up to correct some of the issues that are similar to this, but this particular problem was never resolved.

Now for the dirty laundry.

We worked for about two years with Microsoft and Apple on this issue. It may have been longer, I don't recall. We had a major support contract with Microsoft and reported this issue to them. I'll spare you the gory details. But the end result was this:

  • The root cause is that iOS is able to convince ActiveSync to manipulate properties on meetings that it should not be able to manipulate (namely, the organizer of the meeting). Sometimes, it will make these decisions because for whatever reason it believes [these changes are] in the best interest of the user.

  • Microsoft has an ActiveSync specification that calls out what properties should and should not be used during EAS communication. In our troubleshooting it was determined that Apple's manipulation of the organizer field is against the ActiveSync specification. However, ActiveSync will not stop iOS from doing this regardless of the fact that it is "against the specification." ActiveSync will happily accept the change and write the properties from the mobile device even if the ActiveSync spec says that Exchange explicitly should not do this.

The end result:

Apple claims that it's Microsoft's bug because ActiveSync lets it happen. Microsoft claims it's Apple's bug because they wrote code that makes it happen. Microsoft says they "told Apple not to do this but they did it anyway."

Ultimately, we were of the opinion that it was Microsoft's bug to fix since the specification laid down rules of this nature yet is unwilling to enforce them. We pointed out to them that this seemed to be a security issue. They disagreed.

Like I said, I spoke to my old colleagues and they confirmed that the problem still exists and with iOS 6, the meeting hijacks appear to have worsened. They are still in the planning stages of Exchange 2010 so I cannot comment on whether or not the calendar repair agent helps this issue in that particular environment.

Thanks to our reader for contributing his experience. If you've got specific details on troubleshooting this issue or have run into it yourself, please let us know.