Hacker News new | past | comments | ask | show | jobs | submit login
Citigroup fined $7m after legit transactions mistaken for test data for 15 years (theregister.co.uk)
163 points by adamnemecek on July 14, 2016 | hide | past | favorite | 108 comments



Synopsis: SEC sends clear message to tech people in finance: shut the fuck up if you find something, silently fix it, and sweep the remaining crumbs under the rug, or else your company will be fined millions.


If they did that and the SEC found out, they probably wouldn't stop at just fining you. Which is probably what Citigroup guessed and why, after realising the extent of the issue, they reported it fully within a month


Indeed, Martha Stewart is a prime example of how NOT to deal with the SEC. Turns out she wasn't guilty of insider trading, but she still went to jail for lying to the SEC about the trades in the first place. They take that very seriously.


This particular example seems to reinforce the argument for saying nothing at all.


Directors of companies have legal responsibilities to provide these reports to the government. So instead of the company getting a fine for making a mistake even though you tried to comply, now you are personally choosing not to fulfil your legal obligations as a director. Smart move.


The corporate veil is pretty tough, but that's one good way to give the government reason to pierce it.


> Directors of companies have legal responsibilities to provide these reports to the government.

What if you don't tell the directors, but just fix the problem you have discovered? Is everyone off the hook then, or does that also amount to breaking the law (in some country)?


Why you're in Operations or Technology in large financial companies, you're confronted with 'could do better' issues all of the time. All of the time. The more issues the greater the legacy of the system you're working on, as in this case, functionality has been altered from the original vanilla system (here, alphanumeric field type replacing a numerical feed type, the the documentation not being updated/references/or probably in an unreferenced document documenting the original system).

Spotting these things is a _fantastic_ way for a VP to get on the fast-track to Director. And it is fantastic, as a Director, to have people on your team actively looking for holes.

Why?

Because Operational Control is a #1 strategic target for all banks. $7million is nothing. At an extremely senior level this is evidence that a culture of transparency and compliance exists in the company, and ammo the next time the SEC or FED express a 'concern'. At a low level it is a Director or VP demonstrating to their boss that they understand the strategic direction, and that under their watch nothing big is going to blow up, nothing $7billion big; something $7million big is nothing, they know their boss knows this and will get a thank you for it being raised.

So you tell the directors. You make a nice PPT and include it in 'initiatives' when a senior visitor comes to visit and gets a de-brief on your department. You make sure it's carefully and clearly explained, so they can explain it to their boss in a nice, pro-active, continuous improvement kind of manner.

A bank which does not operate like this, in the post 2008 era of regulatory punishment for purgery, is an organisation with a very short future.

Source: Work in Operations and Technology in large banks.


> nothing $7billion big; something $7million big is nothing, they know their boss knows this and will get a thank you for it being raised.

Further, this was obviously discussed with the boss before it was raised.


And run the risk of losing big, instead of knowing for sure you'll lose small. Can you get a good estimation of the risk? If not, can you (not your company: you) afford the big loss?


Isn't the lesson that you should blow the whistle? You could take home $700k to $2.1 mio, which is not bad for a back office developer. This is a lower bound because I'm sure the fine/reward would have been bigger if they didn't report it themselves.


Where do we see that tidbit?


SEC Whistleblower Program https://www.sec.gov/whistleblower


$7m is a slap on the wrist for the sort of thing we're talking about, and coming clean shouldn't be a get out of jail free card either, which brings with it all sorts of pathological behaviours as well


Would you like someone to actually slap you on the wrist every time you make an innocent mistake in which there are no actual damages and nobody is hurt?

This is not a case where the company failed to transfer money owed to the government. And even in such a case, the appropriate remedy would be actual damages plus interest, where the interest is at some punitive rate.

Because some transactions were innocently concealed, the damage is that the government may have lost some opportunities to catch some people laundering money through those branches of the bank. But that is very indirect. In any case, in those cases they would probably have existing suspicions, right? And they would notice that, oops, that person is using a branch for which we have no data from Citigroup: how come?

The SEC didn't catch this error precisely because they were not investigating any user of those branches for which data were missing.

They only lost the opportunity represented by situations in which the data is the primary source of the initial suspicion of wrong-doing. That is all. As in, something in the numbers raises a red flag, and then they investigate and uncover something.

Well, they have the data now; they could comb through it, right? This 15 year period, or at least most of it, should be well within the statutes of limitations that they could still prosecute cases uncovered by the data.


You realize the alternative is jail time for everyone who participated in the cover up? No amount of my company's money is worth my freedom.


$7m is basically nothing to someone like Citigroup. If they had tried to cover it up and the information leaked out some other way they could be facing a real fine.

A $7m fine for someone like Citigroup is basically a parking ticket.


$7m is pocket change for Citigroup.

No wonder the big banks keep shitting the bed. There's never any real consequences for their fuckups.


These fines are fundamentally stupid: yes, Citi's IT fucked up, but the fault is with the regulators for having such braindead reporting requirements to begin with.

Instead of something sensible like "you trade, you report", the regulators have set up a patchwork of formats, inclusion criteria and target agencies that pretty much ensures that lapses like this occur. Turning Frank-Dodd into workable code is fucking hard: I spent a couple of years pushing that boulder up the slope until I ragequit a couple of months ago.

The regulators should be ingesting data in one place and running analytics on a data lake. The banks are so sick of spending money dealing with the lack of regulatory technical competence that they'll probably happily pony up a couple of billion dollars between them to set up the surveillance system for the Feds; doing it once is cheaper in the long run than repeating the same set of mistakes at every bank on the Street.


The banks are sick of this, but just like the grass that doesn't want to be eaten by the cows, they also depend on this complicated regulation to keep our competitors.


I'm not sure complicated reporting is how banks are maintaining margins. They're diverting billions into complying with these requirements, for very little gain.


And anyone entering their business would have to as well. The large banks are happy to have these regulations in some ways as it makes it hard for midsized banks to grow and compete with them.


Yes. Or for scrappy upstarts to compete from their garage.


> Citigroup failing to send information on 26,810 transactions in over 2,300 such requests.

26810 requests, do you think they made more than $7m on this?

It's about proportional fines. Just because they're a giant company doesn't mean we should find then $1b for forgetting to put a handicapped parking space at one of their offices.


There is a school of thought that punitive fines should be a proportion of company value/earnings rather than an absolute dollar figure to exact an equal amount of discomfort.

I think Finnish speeding fines are a percent of income.


There is a school of thought that punitive fines should be a proportion of company value/earnings rather than an absolute dollar figure to exact an equal amount of discomfort.

In the infamous McDonald's coffee lawsuit, this was actually the motivation behind the initial large damage award. The jury attempted to award punitive damages equal to two days' worth of McDonald's coffee revenue.

(obligatory note here for the many people who have heard false information about that case: the coffee spilled in a car, yes, but the car was motionless, in a parking space, and the person who spilled it was not the driver, and was found partially at fault for the spill; she suffered severe burns requiring hospitalization and skin grafts, which is not generally what one expects from coffee; it was found McDonald's served its coffee significantly hotter than other chains, in a temperature range making burns more likely, and was aware of the fact that it could cause severe burns because this wasn't the first case, and in fact McDonald's was aware of hundreds of cases of burns resulting from its coffee; the initial damage award was significantly reduced by the judge; search for Liebeck v. McDonald's for more details)


Yeah though even then it was connected to the coffee revenue, right?

I feel like this school of thought is also the one that ends up with things like "3 strikes and you're 25-to-life"


Only because the fine is based on your income doesn't mean it has to be draconic. Quite the opposite. They can actually be less draconic than fixed amount fines. If you earn minimum wage a speeding ticket can be a complete disaster. If you are a tech worker you will barely notice the ticket.


25-to-life is indeed excessive, but if some people had 25 year lifespans and others had 2500 year lifespans, "3 strikes and you're 10-25% of your lifespan" is actually quite reasonable.


I think I see what you're getting at: punishments or penalties for offences that are arguably disproportionate to the crime.

On the other hand I think there is a gulf of difference between "3 strikes" laws and punitive damages being awarded against a company for an arguably frivolous lawsuit.

The former will disproportionally target people who are relatively disadvantaged, e.g. people living in poverty or drug addicts, and ruin their lives.

The latter (in this case) targeted a multinational corporation, with the damages being around 0.01% of its annual profit or less. McDonald's can survive that. Even if a person or two in the chain of command get fired, there's a gulf of difference between losing your job and getting locked up for 25 years.


> an arguably frivolous lawsuit.

I know you're not talking specifically about mcd coffee suit, but there's nothing arguable about that one; because there's still some measure of belief that it was frivolous here's a quote taken from the wikipedia article[0]:

> Liebeck was taken to the hospital, where it was determined that she had suffered third-degree burns on six percent of her skin and lesser burns over sixteen percent. She remained in the hospital for eight days while she underwent skin grafting. During this period, Liebeck lost 20 pounds (9 kg, nearly 20% of her body weight), reducing her to 83 pounds (38 kg). After the hospital stay, Liebeck needed care for 3 weeks, provided by her daughter. Liebeck suffered permanent disfigurement after the incident and was partially disabled for two years.

[0] https://en.wikipedia.org/wiki/Liebeck_v._McDonald%27s_Restau...


> punishments or penalties for offences that are arguably disproportionate to the crime

This is not incompatible, the school of thought still wants to achieve that.

"this crime is minor and deserves a minor punishment of level 2 suffering, what's a good way to inflict level 2 suffering on this individual"


> which is not generally what one expects from coffee

I disagree. I think it's reasonable to expect that coffee and other hot drinks might be all the way up to boiling.

> in a temperature range making burns more likely

Is there a particular range for burns? Isn't it simply that the hotter it is, the more burns you get?


That sounds linear to me, which is not correct. Injury level is exponential with temperature:

http://www.ncbi.nlm.nih.gov/pubmed/18226454

Injury time is logarithmic:

http://www.accuratebuilding.com/services/legal/charts/hot_wa...


> That sounds linear to me

What? Absolutely not. I'm just saying that it sounds reasonable to believe that burns increase with temperature, as opposed to being high in a range of temperatures and lower below and above that range. Figure 4 in your first link agrees with this common-sense guess.


The guy said "in a temperature range where burns are more likely". I'm not sure why you're objecting; there are certainly ranges where burns are less likely; that's what the paper I posted is about.

I think it's also pretty clear just from the burn time curve. If it takes you a second or two to notice the heat and move away, then anything above ~155F is going to make a burn much more likely. At 180F, the burn is basically instantaneous. Whereas at 140F, having five seconds to respond gives you a lot of time to move, shake off the liquid, et cetera.


> The guy said "in a temperature range where burns are more likely".

Which makes it sound like there is a lower and an upper bound for this range. That's the issue.


Not to me, so I'd say it's more "your issue" than "the issue". Industry articles on serving temperatures are all about ranges, so I presume he's just talking about those.

But even with your interpretation, it's true. The upper bound is 212F. A cup of steam is not a significant burn risk, that being something like 0.16 ml of water.


Even if fines were in proportion to company value/earnings, they would also need to be in proportion to the violation. Not every violation is equally as egregious.


> I think Finnish speeding fines are a percent of income.

Yes and no. Lesser infractions are static amounts, larger ones are based on day fines, they determine the amount of days -> units for the fine based on the severity of the infraction and the units are used as a multiplier against your daily income for your fine.


I've thought long and hard about this for many years. Punitive damages - eg jail time or financial punishment should be removed from our system except in cases where people are unfit to be in society (like murders' etc).

What should happen - all of the management at Citgroup should have to attend a 5 day training provided by the SEC showing how they can fix the reporting problems they have. How it causes problems to society. How it is dishonest - and how it wastes taxpayers dollars.

I'm betting having that happen to Citigroup 2 or 3 times a year would really make them think about following the rules.

Plus - its positive reinforcement instead of negative (punative) damage.


same goes for Switzerland, but as common sense suggests, there is and should be some threshold based on severity. below is static fine, above it things get more interesting/intense.

some (a lot) people would like to see banks burn, in same way common folks enjoyed public decapitations of ruling classes in french revolution. not judging, hard topic on its own, probably depends on where you are positioned in your life.


Too punitive of a fine would result in Citigroup not reporting.


For me it's not as much about fining them as it is holding the correct people responsible (not just throwing some junior engineer under the bus as usually happens) and making sure it cannot happen again or gets noticed much more quickly


Fines that aren't proportional are unfair to the poor and too lenient for the wealthy.


Large companies have more employees and will have more violations, maybe proportional to their size, whereas a rich person should not have more speeding tickets than a poor person and should arguably pay more per violation.


That may have been true back in the 20th century, but not anymore--Apple and Walmart have market caps on the same order of magnitude, but one employs far more employees than the other. Besides, if you have more $ per employee, that just means each violation will cost more money/damage.


This is the sort of comment why people vote for Trump.

They made a mistake, a programming mistake no less, something many people here have done.

Then fully admitted it when they found out.

Yet this is them being evil?

No wonder people vote against the left.


The other thing is with a company the size of citigroup (250,000 employees), it is statically impossible not to have:

- incompetent and/or careless employees and managers

- dishonnest employees

- computer bugs, glitches, clerical errors

If you take down a large corporation every time you find any of these, there will be no corporation left within a year. Just small companies that were statistically lucky to have neither of those that particular year.

Name me a program, any program (other than Hello World) where no bug has never been found!


They had this bug for more than a decade. They should have systems in place to look for these things.

People make mistakes, but these mistakes should be caught before they get into production. And the ones that still make it into production should be hunted.


Should we discuss about all the 15 years old bugs that are found in Windows, Linux and MacOS which are well into production (and many of them critical bugs that affect the core of the product)? Has a software company ever been fined or held liable for bugs in its products? In fact too often, bug fixes are paid updates.

Financial companies are held to extraordinary standards, and in my opinion it's a game they cannot win.


This is not a minor bug, this is a bug that caused data to be misrepresented. If you want to compare it to OS bugs, then you need to look at silent data corruption: how many data corruption bugs have gone undetected in operating systems for 15 years?


The notorious (and still disputed) HFS+ bit-rot issues?


You mean a server OS leaking kernel memory to any external connection doing something special with TLS without leaving any audit trail that this happened is a minor bug?

We could talk about the OS driver shit show too!


this is unbelievably naive comment... do you work in IT? 15 year old bugs are nothing special, with known ones having workarounds implemented (often buggy), or just some completely new happening on broken data feed, unexpected values etc. the list is endless


Who said anything about being evil? If my car manufacturer has a bug in their manufacturing process and I die in a ball of fire as a result, they weren't being evil (they didn't intentionally kill me), but it doesn't change the fact that they screwed up and are going to have to make amends.

Citigroup screwed up. Now they have to pay a fine. If they get off the hook for free, how is that fair to their competitors, who also had to do this rather tedious reporting?

Same here,


Citigroup was $7 BILLION for their mortgage fraud. [1] I think that can be considered a "real consequence." This was a far less severe infraction, and the fine was correspondingly much lower.

[1] http://www.reuters.com/article/us-citigroup-settlement-doj-i...


I was thinking the exact same thing. They should have a really thorough investigation and they need to make sure that NO ONE knew about this bug at any point in the past 15 years.

If Citygroup has a habit of hiring and fostering employees who turn a blind eye and keep their mouths shut, then they should be punished severely.


If someone knew and didn't say, they should be punished.

If no one knew, the managers who were tasked with setting up procedures and systems for knowing, should be punished.


Dude, they fucked up. You don't have to send Judge Dredd over for this.


They didn't lose anything, they were FINED $7m for submitting incorrect reports. With the number of mergers that they have gone through it's not surprising they have trouble with company wide reporting.


This is the gist of it:

"But in 1998, the company started using alphanumeric branch codes as it expanded its business. Among them were the codes 10B, 10C and so on, which the system treated as being within the excluded range, and so their transactions were removed from any reports sent to the SEC."


The original title stated said "Citi lost $7m after legit transactions mistaken for test data". That was what the Register used too, but it's very misleading.


Edited.


I think the most impressive part is that apparently the same system and code had been running for 15 years as the number of transactions reported on had increased exponentially


They did, it just left out a few transactions (26,810 transactions over 15 years is a very small number).


Good point. Just under 5 transactions a day really. I think the point that's really annoyed the sec is the number of years they have to go back and correct now that they have the right data.


And these systems clear around 1.5-2.5 million transactions a day at the moment.


I think it's the bad kind of impressive, one where ATMs still run COBOL.


i think the bad kind of impressive would be replacing a system that's had thousands of man-years of real world user testing without a really really really critical reason.


Why do you think it's necessary to constantly re-write code using the latest popular trends?

Programmers reinvent the universe every few years, but really nobody else does.


I'd have to disagree on that part. The ATMs that the company I work for run Windows. We are the largest manufacturer, until the other 2 big ones finish merging.

Besides, C is 44 years old and used on a ton of stuff.


Interesting. Windows CE? Are there any glaring technical issues you've run into over the years? What processors are the ATMs using?


I took this in the UK two years ago: https://4z2.de/atm_windows.jpg - I don't know enough about how the various versions of Windows look but maybe this helps.

It also doesn't look very trust-inspiring.


You need to trust the bank's network security more than you trust the ATM itself.

There were some high profile breaches at some retailers in the past couple years that exploited some 0days. How can you defend your POS/ATM against a 0day if the retailer/bank has bad network security practices?


I guess these machines are not connected to the Internet, and have a very limited user interface surface.

Flaws are less important.


In the US, we have private leased lines to connect with some of the major banks. But the banks most likely use something else to connect to the ATMs.

Most attacks are physically breaking into the cash safe but there were some attacks a couple years ago where people were plugging into the USB port and getting money or something.


I'm not GP, but if I had to guess it would be Windows Embedded, I know of a number of ATMs that use it.


The bad kind of impressive would be getting running ATMs on NodeJS.

ducks


May I introduce you to the "Lamassu Bitcoin ATM"?


This is a thing.


What advantages do you anticipate from a complete rewrite?


Part of responsibility here is on SEC too IMO. When designing that "blueprint" format and data exchange protocols, they didn't implement mechanisms to verify correctness and completeness of data received.


Important to note that they only left these transactions out of report data sent to the SEC. It's not like they were not honoring the transactions or that some people were missing money.


But if those trades included insider trading or market manipulation then they were hidden from the regulators' investigations.

Barings was brought down by trades in a special "error account" 88888 that was excluded from (different) reporting.


I have done bluesheet reporting code for another large bank and it is one of the most tedious things you can ever do in software. It's a report of all the trades that the bank does and the SEC can come back and ask for historical data at any point of time. So there's a huge database with feeds coming in from multiple trading systems. Usually these feeds have to be enriched with the right account numbers and so on. This needs lookups to other reference data systems, which frequently are changing because of changing regulations, growing businesses etc. I am not surprised this bug remained undetected for more than 15 years. The guys who coded this initially are probably long gone and nobody did knowledge transition of the fact that some account ranges are not test accounts, even though they look like test accounts.


Totally unrelated, but I am not surprised. I once logged into my Citi credit card account and was granted access to another user's account. Certain places were off limits but I was able to view a lot of details. Pretty scary! I never heard back after reporting the issue.


Did you collect proper snapshot? Did you report it to the right official authorities?


I did grab a few screens and contacted the only available "support" link I could find easily on their site, but after a few weeks with no response I eventually deleted the files.


This makes me feel more comfortable with the reality that some broken code I wrote a long time ago might still be running somewhere... :)


Seems to be something like "089" < x < "100", should never use "range" to handle string ids.


There's probably a comment above it

  // XXX: too general, revisit when we have more than 100 branches


Should have written TODO


I've seen the XXX suffix in the CPython source code - what does it mean compared to TODO?


I would assume searchability. A non-case-sensitive non-regex search of a codebase could yet false positives for things like "autoDot"


Arbitrary short and easy to remember string presumed to be unlikely to generate false positives when searched for. TODO can generate false positives if your system actually deals with todo items, etc.


I suspect the bugs like this come about because of a patch not because of the original development. Devs and dev teams tend to get sloppy after the first push and budgets tend to shrink dramatically.

One time I found a bug that was running for a few years and the result of it was the company was under reporting by millions of dollars per quarter (the running total was near to $100mm, and im sure it crossed it after my contract ended).

This was VERY well tested software in the beginning (one of the best test suites i've seen actually) and audited up to high heaven. The problem started when the patches rolled in and those, are not tested anywhere near as much.


//Try this in your console.

function should_not_exclude_10B_10C(x) { if ("089" < x < "100") { console.log('excluding ' + x + ' in report.') } else { console.log(x + ' is normal.') } }

should_not_exclude_10B_10C("10B")

should_not_exclude_10B_10C("10C")


Actually, no: ascii 10B>100. The bug above is that you can't do chained inequalities like that in Javascript. Try: should_not_exclude_10B_10C("200")


B > 0 assumption is broken in their code. Read Page 4, footnote no.4: https://www.sec.gov/litigation/admin/2016/34-78291.pdf This was not caused by Ascii confusion...


These could be IBM Mainframes that are EBCDIC based.


I've never understood how these fines are meant to benefit anyone. If no one is affected, then why is there a fine? Who is this money going to for damages to be repaid?

Also, why are you not allowed to use real data for testing purposes?


The SEC was not impressed and said in a statement announcing the fine that the "failure to discover the coding error and to produce the missing data for many years potentially impacted numerous Commission investigations."


Lying to the SEC is a crime. "It was an accident" doesn't really cut it with financial institutions data handling and development practices.


what were these transactions for?


There is mention of trading data which suggests to me that it might be to do with traders employed by Citigroup ie staff members whose job it is to use a block of the bank's money or outside investor's money to buy and sell shares, commodities and pretty much anything where they believe they can buy and sell to turn a profit.


Trades (stock, etc) the bank and/or their clients made.


Yawn. This company died eight years ago.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: